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

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( )方法相同。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值