String类包括了几个用于比较字符串或字符串内子字符串的方法。下面分别对它们进行介绍。

equals( )和 equalsIgnoreCase( )

使用equals( )方法比较两个字符串是否相等。它具有如下的一般形式:

boolean equals(Object str)

这里str是一个用来与调用字符串(String)对象做比较的字符串(String)对象。如果两个字符串具有相同的字符和长度,它返回true,否则返回false。这种比较是区分大小写的。

为了执行忽略大小写的比较,可以调用equalsIgnoreCase( )方法。当比较两个字符串时,它会认为A-Z和a-z是一样的。其一般形式如下:

boolean equalsIgnoreCase(String str)

这里,str是一个用来与调用字符串(String)对象做比较的字符串(String)对象。如果两个字符串具有相同的字符和长度,它也返回true,否则返回false。

下面的例子说明了equals( )和equalsIgnoreCase( )方法:

// Demonstrate equals() and equalsIgnoreCase().
class equalsDemo { public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; String s3 = "Good-bye"; String s4 = "HELLO"; System.out.println(s1 + " equals " + s2 + " -> " + s1.equals(s2)); System.out.println(s1 + " equals " + s3 + " -> " + s1.equals(s3)); System.out.println(s1 + " equals " + s4 + " -> " + s1.equals(s4)); System.out.println(s1 + " equalsIgnoreCase " + s4 + " -> " + s1.equalsIgnoreCase(s4)); }
}

该程序的输出如下所示:

Hello equals Hello -> true
Hello equals Good-bye -> false
Hello equals HELLO -> false
Hello equalsIgnoreCase HELLO -> true

regionMatches( )
regionMatches( )方法将一个字符串中指定的区间和另一字符串中指定的区间进行比较。它的重载形式允许在比较时忽略大小写。下面给出这两种方法的一般形式:

boolean regionMatches(int startIndex, String str2, int str2StartIndex, int numChars)
boolean regionMatches(boolean ignoreCase, int startIndex, String str2, int str2StartIndex, int numChars)

对于这两种形式,startIndex指定了调用字符串(String)对象内区间开始的下标。用于比较的字符串(String)由str2指定的。在str2内,开始比较区间的下标由str2StartIndex指定。

用于比较的子字符串的长度在numChars中。如果ignoreCase是true,字符的大小写被忽略。否则,大小写是有意义的。

startsWith( )和endsWith( )
字符串(String)定义两个例程,它们或多或少是regionMatches( )方法的特殊形式。

startsWith( )方法判断一个给定的字符串(String)是否从一个指定的字符串开始。相反地,endsWith( )方法判断所讨论的字符(String)是否是以一个指定的字符串结尾。它们具有如下的一般形式:

boolean startsWith(String str)
boolean endsWith(String str)

这里,str是被测试的字符串(String)。如果字符串匹配,返回true。否则返回false。

例如:

"Foobar".endsWith("bar")

"Foobar".startsWith("Foo")

都是true。

下面给出startsWith( )方法的第二种形式。这种形式允许指定一个起始点:

boolean startsWith(String str, int startIndex)

这里,startIndex指定了调用字符串开始搜索的下标。例如,

"Foobar".startsWith("bar", 3)

返回true。

equals( )与==的比较

理解equals( )方法和==运算符执行的是两个不同的操作是重要的。如同刚才解释的那样,equals( )方法比较字符串(String)对象中的字符。

而==运算符比较两个对象引用看它们是否引用相同的实例。下面的程序说明了两个不同的字符串(String)对象是如何能够包含相同字符的,但同时这些对象引用是不相等的:

// equals() vs ==
class EqualsNotEqualTo { public static void main(String args[]) { String s1 = "Hello"; String s2 = new String(s1); System.out.println(s1 + " equals " + s2 + " -> " + s1.equals(s2)); System.out.println(s1 + " == " + s2 + " -> " + (s1 == s2)); }
}

变量s1指向由“Hello”创建的字符串(String)实例。s2所指的的对象是以s1作为初始化而创建的。因此这两个字符串(String)对象的内容是一样的。但它们是不同的对象,这就意味着s1和s2没有指向同一的对象,因此它们是不==的,上面例子的结果如下:

Hello equals Hello -> true
Hello == Hello -> false

compareTo( )
通常,仅仅知道两个字符串是否相同是不够的。对于排序应用来说,必须知道一个字符串是大于、等于还是小于另一个。一个字符串小于另一个指的是它在字典中先出现。而一个字符串大于另一个指的是它在字典中后出现。字符串(String)的compareTo( )方法实现了这种功能。它的一般形式如下:

int compareTo(String str)

这里str是与调用字符串(String)比较的字符串(String)。比较的结果返回并被解释如表所示:
字符串比较的结果及其含义

含义
小于0 调用字符串小于str
大于0 调用字符串大于str
等于0 两个字符串相等

下面是一个对字符串数组进行排序的例子程序。程序中在冒泡法排序中使用compareTo( )方法确定排序的顺序:

// A bubble sort for Strings.
class SortString { static String arr[] = { "Now", "is", "the", "time", "for", "all", "good", "men", "to", "come", "to", "the", "aid", "of", "their", "country" }; public static void main(String args[]) { for(int j = 0; j < arr.length; j++) { for(int i = j + 1; i < arr.length; i++) { if(arr[i].compareTo(arr[j]) < 0) { String t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } System.out.println(arr[j]); } }
}

程序的输出是如下的单词表:

Now
aid
all
come
country
for
good
is
men
of
the
the
their
time
to
to

正如从这个例子的输出所能看到的,compareTo( )方法区分单词的大小写。单词“Now”因为是以大写字母开始的而出现在其他单词的前面,这意味着它在ASCII字符集中具有更小的值。

如果想在比较两个字符串时,忽略大小写,可以使用如下的compareToIgnoreCase( )方法:

int compareToIgnoreCase(String str)

除了忽略大小写之外,该方法的返回值与compareTo( )方法相同。

Java基础之字符串详细比较相关推荐

  1. java基础-String字符串字符长度校验

    java基础-String字符串字符长度校验 /*** 校验字符串是否在规定字符数内* @param str* @param maxLength* @return*/ public static bo ...

  2. 【Java 基础】字符串StringBuilder、StringBuffer,工具StringJoiner

    字符串StringBuilder.StringBuffer,工具StringJoiner 一.概述 二.StringBuilder 三.StringBuffer 三.StringBuilder .St ...

  3. 八门神器java版本_【修改教程】java基础知识字符串处理_八门神器

    [Java基础知识]字符串处理1.获取字符串的长度 String s = "AIDE"; System.out.println(s "长度为:" s.lengt ...

  4. 【Java 基础】字符串(String、StringBuilder),日期(Date、SimpleDateFormat、Calendar)

    字符串.日期 字符串(String) 字符串常量池(String Constant Pool) 字符串的初始化 intern 方法 字符串的常用方法(截取) 可变字符串(StringBuilder) ...

  5. java基础之字符串

    除了数字和java关键字外,其他的由多个字符组成的一串字符,都可以叫做字符串.在java中,字符串需要用双引号引起来. 使用String对象存储字符串 String s = "Hello W ...

  6. java string 比较前几个字符_Java基础之字符串详细比较

    String类包括了几个用于比较字符串或字符串内子字符串的方法.下面分别对它们进行介绍. equals( )和 equalsIgnoreCase( ) 使用equals( )方法比较两个字符串是否相等 ...

  7. Java基础篇——字符串处理(String,StringBuffer,StringBuild)

    提前说明本次的文章很长但是很有用,有耐心看完的必定不是凡人,必定会有很大的收获.本人在总结的过程中也收获了很多的知识,希望我们可以一起学习.写下这篇文章完全是抱着可以帮助到他人的态度. 虽然要写出很高 ...

  8. 【Java基础】字符串与数组

    字符串创建于存储机制 字符串的声明和初始化的两种情形: 1. str1 = "abc"; str2 = "abc";在JVM中存在着一个常量池,其中保存着很多的 ...

  9. java基础将字符串进行反转

    将字符串进行反转 方法一:  //定义String String text = "abcdefr";//反转后的String String newText = "&quo ...

最新文章

  1. 用css3和ico图片实现火狐社区的分享图标
  2. Workflow之Activity
  3. cv2作图cv2.polylines,cv2.fillPoly,cv2.fillConvexPoly多边形时需要注意的地方
  4. 【例题 7-2 UVA - 11059】Maximum Product
  5. quickserver java_QuickServer--在吵闹的环境里快速搭建自己的TcpServer(Pragmatic系列) - java - CSDN技术中心...
  6. 阻止事件冒泡(event.stopPropagation())/阻止默认事件(event.preventDefault())
  7. 五年技术工作的一点点感悟
  8. 2022年牛客网最热门的Java岗面试八股文汇总,这一份你绝对没有
  9. 实战NLP beginner任务一:基于机器学习的文本分类
  10. P2P模式的相应/应答的一个例子
  11. 选对流程引擎,玩转流程设计不是梦
  12. 老男孩教育运维班100台规模集群存储系统搭建及数据实时备份上机实战
  13. 综合电商高保真移动端Axure原型模板
  14. 线性调频信号MATLAB仿真
  15. 探探提醒对方账号异常_我告诉你探探中对方账号异常怎么回事
  16. HTMLCSS基础篇之十一:字体与颜色样式
  17. vue 实现出生日期计算年龄
  18. JAVA在线教育视频点播学习系统毕业设计 开题报告
  19. Soso(嗖嗖)移动 java 项目
  20. TCP/IP学习笔记(一)(转载)

热门文章

  1. [转载] 跟着吴恩达学机器学习(Machine Learning) on Coursera 第一天
  2. MATLAB获取系统时间
  3. 没有编辑器时,使用echo更换源
  4. Python实训第一天--基础知识
  5. 为什么default package包里面的方法不能被其他包调用
  6. Dapper.NET—轻量ORM
  7. 51nod 平均数(二分+树状数组)
  8. Spring(三)Bean继续入门
  9. 大小端判断及相互转化
  10. caffe学习日记--lesson7:caffemodel可视化的两种方法