精华内容
下载资源
问答
  • Java字符串比较

    千次阅读 2019-04-01 16:47:06
    本文为翻译的文章,作者Rafael Chinelato Del Nero,原文: ...在字符串池中,字符串方法、关键字和操作符如何来处理比较。 在Java语言中,String类封装了一个char类型的数组。...

    本文为翻译的文章,作者Rafael Chinelato Del Nero,原文:

    https://www.javaworld.com/article/3276354/java-language/java-challengers-2-string-comparisons.html

    在字符串池中,字符串方法、关键字和操作符如何来处理比较。
    在Java语言中,String类封装了一个char类型的数组。简单来说,String是一个字符串数组,用来构成词语,语句,或者其他任何你想要的数据。
    封装是面向对象编程中最强大的概念之一。因为有了封装,你不需要知道String类是如何工作的,你只需要知道使用接口中的哪个方法。
    当你观察Java中的String类,你可以看到char数组是如何被封装的:
    在这里插入图片描述
    为了更好的理解封装,考虑一个实际的对象:汽车。为了驾驶它,你需要知道汽车内部是如何运转的吗?当然不,但你需要知道汽车提供了什么交互:比如象油门,刹车,方向盘这样的东西。每个交互都支持某种特定的操作:加速,刹车,向左转,向右转。面向对象编程也是一样的。

    我在Java挑战者系列的第一篇博客中介绍了方法重载,String类广泛地使用了这种技术。重载能够让你的类变得真正的灵活,包括String:
    在这里插入图片描述
    这篇Java挑战者不是要尝试理解String类如何工作,而是帮助你理解它做了什么,以及如何在你的代码中来使用它。

    什么是字符串池?

    String可能是Java中用得最多的类了。如果每次我们使用一个String的时候,都在堆内存中创建一个新的对象,我们可能会浪费很多内存。对于每个字符串的值,字符串池都只保存了一个对象,通过这样的方式来解决上述问题,如下图所示:
    在这里插入图片描述
    图1 字符串池中的字符串

    尽管我们创建了Duek和Juggy的字符串变量,但只有两个对象被创建并保存在堆内存中。为了证明这一点,看看下面的代码样例。(回忆一下,Java中“==”操作符被用来比较两个对象,并确定它们是不是一样的。)

    这段代码会返回true,因为这两个字符串指向了字符串池中的同一个对象。它们的值是相同的。

    一个例外:“new”操作符

    现在看看这段代码----它看起来与前面的示例代码比较类似,但有一点差别。

    基于前面的样例代码,你可能会认为这段代码会返回true,但它确实是fasle。添加了new操作符,强制在堆内存中创建一个新的String。因而,JVM创建两个不同的对象。

    本地方法

    Java中的本地方法将会使用C语言来进行编译,通常是为了操纵内存和优化性能的目的。

    字符串池和intern()方法

    我们使用一种被称为String驻留的技术,把字符串保存在字符串池中。Javadoc告诉我们关于intern()方法的说明:点击此处添加图片说明文字
    intern()方法用来把字符串保存在字符串池中。首先,它校验你创建的字符串是池中是否已经存在。如果不存在,它在池中创建一个新的字符串。 在这背后,字符串池的逻辑是基于享元模式的。

    现在,请留意当我们使用new关键字来强制创建两个字符串的时候,到底发生了什么:
    在这里插入图片描述
    与前面样例中的new关键字不同的是,这个案例返回了true。这是因为使用intern()方法确保字符串将会被保存在池中。

    String类中的Equals方法

    equals()方法被用来验证两个Java类的状态是否相同。 因为equals()方法来自Object类,每个Java类都继承它。 但是equals()方法必须要重写才能让它正确地工作。当然,String类重写了equals()

    来看一下:
    点击此处添加图片说明文字
    就像你看到的,equals方法是比较字符串的状态而不是对象引用。对象引用是否相同没有关系,字符串的状态将会被比较。

    最常用的String方法

    在接受字符串比较的挑战之前,最后还有一件你需要知道的事情。想想String类中的这些通用方法:

    点击此处添加图片说明文字 在这里插入图片描述
    接受字符串比较的挑战!

    让我们快速挑战一下你所学的关于String类的知识。在这个挑战中,你将会使用我们探讨的概念来比较很多字符串。看看下面的代码,你能够确定每个result变量的最终值吗?
    

    点击此处添加图片说明文字
    下面哪个答案是result变量的最终结果:

    A: 02468

    B: 12469

    C: 12579

    D: 12568

    刚才发生了什么?理解String的行为

    代码的第一行我们看到:
    点击此处添加图片说明文字
    尽管调用trim()方法后的字符串是相同的, 但" powerfulCode "字符串与开始不一样了。在这个案例中,比较返回了false,因为trim()方法移除了两边的空格,导致它使用new操作符强制创建了一个新的字符串。

    接下来,我们看看:
    在这里插入图片描述
    这不神秘,在字符串池中,这些字符串是相同的。这个比较返回true。

    再接着:
    点击此处添加图片说明文字
    使用new保留字来强制创建两个新的字符串对象,不管它们是否相等。在这个案例中,比较返回了false,即使字符串的值是相同的。

    接下来是:
    点击此处添加图片说明文字
    因为我们使用equals()方法,字符串的值而不是对象实例将会被比较。在这个例子中,对象是否相同并没有关系,因为比较的是它们的值。这个比较返回true。

    最后,我们有下面的代码:
    点击此处添加图片说明文字
    就像你之前看到的那样,intern()方法把字符串放到了字符串池中。两个字符串都指向了同一个对象,所以这个例子中的比较返回了true。

    字符串的常见错误:

    想知道两个字符串是否指向同一个对象比较困难,特别是当两个字符串包含了相同的值的时候。记住,使用保留字new总会创建一个新的对象,即使值是相同的。

    使用String的方法来比较Object引用也比较棘手。关键是, 如果方法改变了String中的某些东西,那个对象引用将会不同:

    一些示例可以帮助澄清这个概念:
    点击此处添加图片说明文字
    这个比较返回true,因为trim()方法并没有生成新的String。
    点击此处添加图片说明文字
    在这个例子中,第一个trim()方法会生成一个新的String,因为方法会执行它的动作,所以引用不同。

    最后,当trim()方法执行的时候,它创建了一个新的String:
    在这里插入图片描述
    关于字符串需要记住什么

    String是不可变的,所以一个String的状态是不能被改变的
    为了节省内存,JVM把String保留在字符池中。当一个新的String创建的时候,JVM检查它的值并指向一个已经存在的对象。如果池没有一个String包含这个值,JVM就创建一个新的String
    使用==操作符来比较对象引用。使用equals()方法来比较String的值。 同样的规则适用于所有的对象。
    当使用new操作符的时候,在字符池中将会创建一个新的String,即使有一个值相同的String。

    欢迎关注微信公众号,获取更多信息。
    ​​​​在这里插入图片描述

    展开全文
  • Java 字符串比较

    2019-01-23 14:06:11
    独立实现标准字符串库的strcmp函数,即字符串比较函数,从键盘输入两个字符串,按字典序比较大小,前者大于后者输出1,前者小于后者输出-1,两者相等输出0。 样例输入: apple one 样例输出: -1 样例输入: hello ...

    独立实现标准字符串库的strcmp函数,即字符串比较函数,从键盘输入两个字符串,按字典序比较大小,前者大于后者输出1,前者小于后者输出-1,两者相等输出0。

    样例输入:
    apple one
    样例输出:
    -1

    样例输入:
    hello he
    样例输出:
    1

    样例输入:
    hello hello
    样例输出:
    0

    代码:
    `import java.util.Scanner;

    public class Test {
    public static int strcmp(String s1,String s2){
    if(s1.compareTo(s2) == 0){
    return 0;
    }else if(s1.compareTo(s2) >0){
    return 1;
    }
    return -1;
    }
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s1 = sc.next();
    String s2 = sc.next();
    System.out.println(strcmp(s1,s2));
    }
    }`

    展开全文
  • 主要介绍了java求数组元素重复次数和java字符串比较大小示例,需要的朋友可以参考下
  • java获取一个字符串在整个字符串出现的次数,下面写出我的思路和二个实现方法,大家参考使用吧
  • java字符串比较举例

    2013-11-09 21:18:53
    java字符串比较举例,了解如何去判断两个字符串是否相同。
  • Java字符串比较(equals).pdf
  • 主要介绍了浅谈java字符串比较到底应该用==还是equals,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了Java字符串比较方法equals的空指针异常的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • java字符串比较可以用.contains()方法和.indexOf()方法,其中.contains()方法是对.indexOf()的封装,所以性能上肯定是.indexOf()要快些. .contains()方法源码如下:  /**  * Returns true if and only if this ...

    java字符串比较可以用.contains()方法和.indexOf()方法,其中.contains()方法是对.indexOf()的封装,所以性能上肯定是.indexOf()要快些.

    .contains()方法源码如下:

     /**
         * Returns true if and only if this string contains the specified
         * sequence of char values.
         *
         * @param s the sequence to search for
         * @return true if this string contains <code>s</code>, false otherwise
         * @throws NullPointerException if <code>s</code> is <code>null</code>
         * @since 1.5
         */

        public boolean contains(CharSequence s) {
            return indexOf(s.toString()) > -1;
        }

    .contains()例子如下:

    if ("xxxx".contains( "x")) {  
         system.out.println("true");               

     }else{

       system.out.println("false");    

    }

    .indexOf()例子如下:

     String str="ABC_001";

    if(str.indexOf("ABC")!=-1){
     
    
       System.out.println("包含");

    }else{

    System.out.println("不包含");

    }

    展开全文
  • java 字符串对比内容的三种方式

    千次阅读 2018-05-06 12:14:13
    今天无意看到一本书,一种用equalsIgnoreCase对比字符串,原来对比字符串可以用很多种方式,为了自己日后方便学习,现在记录下来,大家也可以借鉴一下一起巩固基础知识。1、使用equals( )方法比较两个字符串是否相等...

    今天无意看到一本书,一种用equalsIgnoreCase对比字符串,原来对比字符串可以用很多种方式,为了自己日后方便学习,现在记录下来,大家也可以借鉴一下一起巩固基础知识。


    1、使用equals( )方法比较两个字符串是否相等。它具有如下的一般形式。这种是我们最常用的方式。

    boolean equals(Object str)

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


    2: 还有 toLowerCase 在转换的时候,过滤一下小写或者是大写,都可以的。这样对比转换的时候比较方便。


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

    boolean equalsIgnoreCase(String str)

    下面是代码测试,如果有什么其他更好的方式大家可以评论我,一起讨论一下。

    public static void main(String[] args) {
    
        String str1 = "ABCD";
    
        String str2 = "abcd";
    
        System.out.println("传统equals方式:---->" + str1.equals(str2));
        System.out.println("equals转小写后方式:---->" + str1.toLowerCase().equals(str2));
        System.out.println("equalsIgnoreCase方式:---->" + str1.equalsIgnoreCase(str2));
    
    }


    运行main函数结果。


    传统equals方式:---->false
    equals转小写后运算方式:---->true
    equalsIgnoreCase方式:---->true



    展开全文
  • Java 字符串与文本相关实例源码,比如不可变字符串与限定字符串字符串比较、提取子串、修改缓冲区中的字符串、判断回文串、正则表达式、字符串匹配、正则表达式语法等,还一一些比如用于比较两个变量是否引用同...
  • Java字符串比较的几种方法

    千次阅读 2021-03-01 17:31:39
    Java 中,字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等··;常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法,接下来详细介绍这 3 个方法的使用: ...
  • Java语言中字符串比较有两种方式:== 和equals()。 “==”比较的是针对两个String类型变量的引用,当两个String类型的变量指向同一个String对象(即同一个内存堆),则返回true。而equals()方法是对String对象封装...
  • Java字符串比较之——==和equals方法的区别 我以前以为这两者好像在java中区别不大,事实证明我犯大错了!!! 这两者是有很大的区别的。 如果二者都是常量,那么==和equal方法没有区别。 但是如果一个字符串是变量...
  • Java字符串比较(3种方法)详解

    千次阅读 2020-09-22 11:14:19
    equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相同的字符和长度,它返回 true,否则返回 false。对于字符的大小写,也在检查的范围之内。 equals() 方法的语法格式如下: str1.equals...
  • java字符串比较大小

    万次阅读 2011-02-28 15:55:00
    public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String...
  • Java字符串比较(equals)

    千次阅读 2016-12-13 14:06:41
    Java中两个字符串比较的常用函数有equals(区分大小写)和equalsIgnoreCase(不区分大小写) 1.equals函数  public boolean equals(Object anObject)返回值是布尔值String word = "wang"; System.out.println...
  • 比如有如下几个字符串: 流量10 流量2 流量8 流量4 流量1 在map中存储, 怎么按照顺序输出 流量1 流量2 流量4 流量8 流量10
  • 将回文转换为一个字符串后,反转此字符串比较这两个字符串却不想等,求问什么? String number1 = String.valueOf(number); String number2 = new StringBuffer(number1).reverse().toString(); boolean answer =...
  • 7-2 判断登录信息--Java字符串比较

    千次阅读 2020-05-10 21:50:04
    题目要求: 从键盘接收用户输入的两个字符串,第一个代表用户名,...用空格分隔开的两个字符串。 输出格式: 首字母大写的一个单词或词组。 输入样例: SwpuIot 123456 输出样例: Welcome 代码块: import java.util.S
  • java字符串比较==和equals()的区别

    千次阅读 2020-08-20 15:50:34
    当我们想要比较两个字符串是否相同时,要特别注意,我们实际上是想比较字符串的内容是否相同。必须使用equals()方法而不能用==。 public class Main { public static void main(String[] args) { String s1 = ...
  • 当用new String(“aaaa”)对字符串做定义时,==会返回false,equals可以返回正常结果。 比如 System.out.println("a" == "a"); //true System.out.println("a".equals("a&...
  • 1,mysql字符串比较:STRCMP(str1, str2):比较两个字符串,如果这两个字符串相等返回0,如果第一个参数是根据当前的排序小于第二个参数顺序返回-1,否则返回1。注意:1,"." 小于 0或"0"2,不...
  • equals()是所有类的对象共有的方法,继承的是Object类的方法,所有对象都可以调用,在字符串比较中,区分大小写 equalsIgnoreCase()是String类的对象方法,字符串比较时不区分大小写,认为A-Z与a-z一样 查看...
  • java字符串比较大小compareTo方法

    千次阅读 2013-03-12 17:57:43
    compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的 差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个...
  • java字符串长度_Java字符串

    千次阅读 2020-07-13 06:44:52
    java字符串长度Java String to long conversion can be done by many ways. Today we will look into some common ways to convert java string to long primitive data type or Long object. Note that since java ...
  • java 字符串间的比较

    2010-06-18 17:21:38
    java 字符串间的比较 java 字符串间的比较
  • Java字符串排序比较

    千次阅读 2019-09-06 15:47:14
    //Java 字符串如何排序比较 // 1、如果字符串相等返回值0 // 2、如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)(负值前字符串的值小于后字符串,正值前字符串大于后字符串...
  • str.equals(null) == true:此时str相当于未分配空间,常见于刚刚声明str后 ...但当str出现更改,如获取edittext时是"hello",后将edittext中的文字删除,此时要比较就是str.equals("")了。因为已经分配了空间。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 640,578
精华内容 256,231
关键字:

java字符串对比

java 订阅