279、Java基础55 - 数字与字符串【比较字符串】 2019.11.23

1、是否是同一个对象

str1和str2的内容一定是一样的!
但是,并不是同一个字符串对象

package character;
 
public class TestString {
 
    public static void main(String[] args) {
 
        String str1 = "the light";
         
        String str2 = new String(str1);
         
        //==用于判断是否是同一个字符串对象
        System.out.println( str1  ==  str2);
         
    }
 
}
  • 输出结果
    在这里插入图片描述

2、是否是同一个对象、特例

str1 = "the light";
str3 = "the light";

一般说来,编译器每碰到一个字符串的字面值,就会创建一个新的对象
所以在第6行会创建了一个新的字符串"the light"
但是在第7行,编译器发现已经存在现成的"the light",那么就直接拿来使用,而没有进行重复创建

package character;
 
public class TestString {
 
    public static void main(String[] args) {
        String str1 = "the light";
        String str3 = "the light";
        System.out.println( str1  ==  str3);
    }
 
}
  • 输出结果
    在这里插入图片描述

3、内容是否相同

使用equals进行字符串内容的比较,必须大小写一致
equalsIgnoreCase,忽略大小写判断内容是否一致

package character;
  
public class TestString {
  
    public static void main(String[] args) {
  
        String str1 = "the light";
          
        String str2 = new String(str1);
         
        String str3 = str1.toUpperCase();
 
        //==用于判断是否是同一个字符串对象
        System.out.println( str1  ==  str2);
         
        System.out.println(str1.equals(str2));//完全一样返回true
         
        System.out.println(str1.equals(str3));//大小写不一样,返回false
        System.out.println(str1.equalsIgnoreCase(str3));//忽略大小写的比较,返回true
         
    }
  
}
  • 输出结果
    在这里插入图片描述

4、是否以子字符串开始或者结束

startsWith //以…开始
endsWith //以…结束

package character;
  
public class TestString {
  
    public static void main(String[] args) {
        String str1 = "the light";
         
        String start = "the";
        String end = "Ight";
         
        System.out.println(str1.startsWith(start));//以...开始
        System.out.println(str1.endsWith(end));//以...结束
          
    }
  
}
  • 输出结果
    在这里插入图片描述

5、练习:比较字符串

创建一个长度是100的字符串数组
使用长度是2的随机字符填充该字符串数组
统计这个字符串数组里重复的字符串有多少种
在这里插入图片描述

public static void main(String[] args) {
         
        String[] strArr = new String[100];
 
        HashSet<String> hashSet = new HashSet<>();
     
        HashSet<String> hashSet2 = new HashSet<>();
         
        for (int i = 0; i < strArr.length; i++) {
            String str = randomStr() + randomStr();
            System.out.print(str + "  ");
            if ((i + 1) % 20 == 0) {
                System.out.println("");
            }
            boolean b = hashSet.add(str);
            if (b == false) {
                hashSet2.add(str);
            }
        }
        System.out.printf("重复的字符串有%d种%n", hashSet2.size());
        if (hashSet2.size() == 0) {
            System.exit(1);
        }
        System.out.println("分别是:");
        for (String s : hashSet2) {
            System.out.print(s+" ");
        }
    }
 
    // 0-9:48-57 A-Z:65-90 a-z:97-122
    public static String randomStr() {
        // 62
        String str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
//      return String.valueOf((char) ((int) (Math.random() * (127 - 33) + 33)));
 
        return String.valueOf(str.charAt((int) (Math.random() * 62)));
    }
  • 输出结果
    在这里插入图片描述

6、参考链接

[01] How2j - 数字与字符串系列教材 (八)- JAVA 比较字符串详解

发布了309 篇原创文章 · 获赞 229 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/youyouwuxin1234/article/details/103203176