字符串比较是常用的实际操作,包含较为相同,比较大小,较为前缀和后缀名字符串数组等。在Java中,有三种较为字符串数组的常见方式:equals(),equalsIgnoreCase()和compareTo()。下边详细说明这三种方式的应用。

两个字符串比较是否相等-实现两个字符串的比较-第1张图片Equals()方式

equals()方式逐一较为2个字符串数组的每一个标识符。假如2个字符串数组具备同样的标识符和长短,则回到true,不然回到false。角色的格也在考虑范畴以内。equals()方式的英语的语法如下所示:

str1.equals(str2);1复制代码种类:[java]

Str1和str2能够是字符串数组自变量或字符串数组文本。比如,下列关系式是合理合法的:

"Hello".equals(greeting)1复制代码种类:[java]

下边的编码演试了equals()方式的使用方法:

String str1 = "abc";String str2 = new String("abc");String str3 = "ABC";System.out.println(str1.equals(str2)); // 輸出 trueSystem.out.println(str1.equals(str3)); // 輸出 false12345复制代码种类:[java]

例1

第一次进入系统软件时,必须管理人员密码设置。出自于安全性缘故,登陆密码必须键入2次。假如2次键入的用户名和密码一致,则起效;不然,提醒将不成功。实际完成编码如下所示:

public static void main(String[] args) { String sys = "学员信息化管理"; System.out.println("热烈欢迎进到《" sys "》系统软件"); System.out.println("请设定一个用户名和密码:"); Scanner input = new Scanner(System.in); String pass = input.next(); // 密码设置 System.out.println("反复用户名和密码:"); input = new Scanner(System.in); String pass1 = input.next(); // 确定登陆密码 if (pass.equals(pass1)) { // 较为2个登陆密码 System.out.println("已起效,请记住登陆密码:" pass); } else { System.out.println("2次登陆密码不一致,请再次设定。"); }}123456789101112131415复制代码种类:[java]

运作程序流程时,因为equals()方式区别英文大小写,当2次键入的登陆密码完全一致时,equals()方式回到true,輸出結果如下所示:

热烈欢迎进到《学生信息管理》系统软件请设定一个用户名和密码:abcdef反复用户名和密码:abcdef已起效,请记住登陆密码:abcdef123456复制代码种类:[java]

不然,輸出如下所示所显示:

热烈欢迎进到《学生信息管理》系统软件请设定一个用户名和密码:abcdef反复用户名和密码:aBcdef2次登陆密码不一致,请再次设定。123456复制代码种类:[java]

EqualsIgnoreCase()方式

equalsignorase()方式的基本功能和英语的语法与equals()方式完全一致,仅仅较为时equalsignorase()不区别英文大小写。较为2个字符串数组时,会觉得a-z和A-Z是一样的。

下列编码表明了equalsIgnoreCase()的应用:

String str1 = "abc";String str2 = "ABC";System.out.println(str1.equalsIgnoreCase(str2)); // 輸出 true123复制代码种类:[java]

例2

在会员管理系统中,必须键入登录名和登陆密码开展认证。在这儿,应用equalsIgnoreCase()方式认证登陆沒有区别登录名和登陆密码的英文大小写。实际的编码完成如下所示所显示。

public static void main(String[] args) { String sys = "学员信息化管理"; System.out.println("热烈欢迎进到《" sys "》系统软件"); System.out.println("输入您管理人员名字:"); Scanner input = new Scanner(System.in); String name = input.next(); // 获得客户键入的名字 System.out.println("输入您用户名和密码:"); input = new Scanner(System.in); String pass = input.next(); // 获得客户键入的登陆密码 // 较为登录名与登陆密码,留意这里忽视英文大小写 if (name.equalsIgnoreCase("admin") && pass.equalsIgnoreCase("somboy")) { // 认证 System.out.println("登录成功。"); } else { System.out.println("登录失败。"); }}12345678910111213141516复制代码种类:[java]

在上面的编码中,因为采用了equalsIgnoreCase()方式开展较为,因而忽视了实例分辨。因而,键入ADMIN和SOMBOY也将被认证如下所示:

热烈欢迎进到《学生信息管理》系统软件输入您管理人员名字:ADMIN输入您用户名和密码:SOMBOY登录成功。123456复制代码种类:[java]

不然,輸出如下所示:

热烈欢迎进到《学生信息管理》系统软件输入您管理人员名字:admin输入您用户名和密码:sommboy登录失败。123456复制代码种类:[java]

equals()和= =中间的较为。

关键的是要了解equals()方式和= =操作符实行二种不一样的实际操作。如上所述,equals()方式较为字符串数组目标中的标识符。= =操作符较为2个目标引入,看他们是不是引入同一个案例。

下列程序流程展示了2个不一样的字符串数组目标怎样包括同样的标识符,但与此同时这种目标引入不相同:

String s1 = "Hello";String s2 = new String(s1);System.out.println(s1.equals(s2)); // 輸出trueSystem.out.println(s1 == s2); // 輸出false1234复制代码种类:[java]

自变量s1偏向由“Hello”建立的字符串数组案例。S2指的是以s1做为复位建立的目标。因而,这两个字符串数组目标的具体内容是同样的。可是他们是不一样的目标,这代表着s1和s2不偏向同一个目标,因此他们并不是= =。

因而,千万别应用= =操作符来检测字符串数组的相同性,以防程序流程中发生欠佳的bug。从外表上看,这类bug十分类似任意间歇性不正确。

针对一些习惯应用C 的String类的人而言,她们在相同检验时一定十分当心。C 的字符串数组类轻载了= =操作符,便于检验字符串数组內容的相同性。悲剧的是,Java不选用这些方式。它的字符串数组“外型和觉得”与标值同样,可是当检测它的相同性时,它的实际操作类似表针。语言表达设计师应当像C 一样干了独特解决,即彻底改变了= =操作符。

自然,每一种语言表达都是有一些不一致的地区。c程序员从来不应用= =来较为字符串数组,反而是应用strcmp涵数。Java的CompareTo方式与strcmp彻底类似。因而,使我们介绍一下Java的compareTo方式。

CompareTo()方式

一般,只是了解2个字符串数组是不是同样是远远不够的。针对排列应用软件,必须了解一个字符串数组是不是超过,相当于或低于另一个字符串数组。一个字符串数组比另一个字符串数组小,这代表它最先发生在词典中。一个字符串数组比另一个大,这代表它发生在词典以后。String的compareTo()方式完成了这一作用。

compareTo()方式用以按词典次序较为2个字符串数组的尺寸,较为根据字符串数组中每一个字段的Unicode值。compareTo()方式的英语的语法如下所示:

str.compareTo(String otherstr);1复制代码种类:[java]

它依照词典次序较为由str表明的标识符编码序列和由otherstr主要参数表明的标识符编码序列。假如字符串数组在词典次序中坐落于别的主要参数以前,则较为結果为负整数。假如str坐落于otherstr以后,则较为結果为整数;假如2个字符串数组相同,結果为0。

提醒:假如2个字符串数组启用equals()方式并回到true,那麼启用compareTo()方式将回到0。

例3

撰写一个简洁的Java程序流程来演试应用compareTo()方式来较为字符串数组和传参的差别。编码如下所示:

public static void main(String[] args) { String str = "A"; String str1 = "a"; System.out.println("str=" str); System.out.println("str1=" str1); System.out.println("str.compareTo(str1)的结论是:" str.compareTo(str1)); System.out.println("str1.compareTo(str)的结论是:" str1.compareTo(str)); System.out.println("str1.compareTo('a')的结论是:" str1.compareTo("a"));}123456789复制代码种类:[java]

上边的编码界定了2个字符串数组“a”和“a”,随后启用compareTo()方式开展间接较为。最终一行代码比较“a”和“a”,由于2个字符串数组同样,因此较为結果为0。实际操作后的輸出如下所示:

str = Astr1 = astr.compareTo(str1)的结论是:-32str1.compareTo(str)的结论是:32str1.compareTo('a')的结论是:0

评论(0条)

刀客源码 游客评论