how2j.cn

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



5分14秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器



示例 1 : 是否是同一个对象   
示例 2 : 是否是同一个对象-特例   
示例 3 : 内容是否相同   
示例 4 : 是否以子字符串开始或者结束   
示例 5 : 练习-比较字符串   
示例 6 : 答案-比较字符串   

示例 1 :

是否是同一个对象

edit
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); } }
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 :

是否是同一个对象-特例

edit

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); } }
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 :

内容是否相同

edit
使用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 :

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

edit

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));//以...结束 } }
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 :

练习-比较字符串

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
创建一个长度是100的字符串数组
使用长度是2的随机字符填充该字符串数组
统计这个字符串数组里重复的字符串有多少种
练习-比较字符串
示例 6 :

答案-比较字符串

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

16分54秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


package character; public class TestString { public static void main(String[] args) { String[] ss = new String[100]; // 初始化 for (int i = 0; i < ss.length; i++) { ss[i] = randomString(2); } // 打印 for (int i = 0; i < ss.length; i++) { System.out.print(ss[i] + " "); if (19 == i % 20) System.out.println(); } for (String s1 : ss) { int repeat = 0; for (String s2 : ss) { if (s1.equalsIgnoreCase(s2)) { repeat++; if (2 == repeat) { // 当repeat==2的时候,就找打了一个非己的重复字符串 putIntoDuplicatedArray(s1); break; } } } } System.out.printf("总共有 %d种重复的字符串%n", pos); if (pos != 0) { System.out.println("分别是:"); for (int i = 0; i < pos; i++) { System.out.print(foundDuplicated[i] + " "); } } } static String[] foundDuplicated = new String[100]; static int pos; private static void putIntoDuplicatedArray(String s) { for (int i = 0; i < pos; i++){ if (foundDuplicated[i].equalsIgnoreCase(s)) return; } foundDuplicated[pos++] = s; } private static String randomString(int length) { String pool = ""; for (short i = '0'; i <= '9'; i++) { pool += (char) i; } for (short i = 'a'; i <= 'z'; i++) { pool += (char) i; } for (short i = 'A'; i <= 'Z'; i++) { pool += (char) i; } char cs[] = new char[length]; for (int i = 0; i < cs.length; i++) { int index = (int) (Math.random() * pool.length()); cs[i] = pool.charAt(index); } String result = new String(cs); return result; } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2022-08-26 练习5-比较字符串参考
ljbeiji




2022年8月26日16点24分
加载中
    public static String genRandomString(int n) {    //生成长度为n的随机字符串
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            switch ((int) (Math.random()*3)) {
                case 0:
                    sb.append((char) (Math.random() * (91-65) + 65));
                    break;
                case 1:
                    sb.append((char) (Math.random() * (123-97) + 97));
                    break;
                case 2:
                    sb.append((char) (Math.random() * (58-48) + 48));
                    break;
            }
        }
        return sb.toString();
    }

    public static String[] genRandomStringArray(int m, int n) {    //生成m个长度为n的随机字符串数组
        String[] sa = new String[m];
        for (int i = 0; i < m; i++) {
            sa[i] = String.valueOf(genRandomString(n));
        }
        return sa;
    }

    public static void print(String[] sa) {    //自定义打印数组,每20个换行
        int flag = 0;
        for (String each : sa) {
            System.out.printf("%s ", each);
            flag++;
            if (flag == 20) {
                System.out.println();
                flag = 0;
            }
        }
        if (flag != 0)
            System.out.println();
    }

    public static void main(String[] args) {
        String[] sa = genRandomStringArray(100, 2);
        print(sa);
        HashSet hs = new HashSet();    //利用哈希集中没有重复元素的特性,计算结果集的个数
        for (String each :
                sa) {
            if (Arrays.toString(sa).indexOf(each) != Arrays.toString(sa).lastIndexOf(each))    //将数组转为字符串,然后比较每一个元素的第一次出现位置和最后一次出现位置是否相同,如果不相同,那就说明该元素是重复的元素,将该元素加入HashSet中即可
                hs.add(each);
        }
        System.out.println("总共有"+hs.size()+"种重复的字符串");
        System.out.println("分别是:");
        System.out.println(hs);
    }

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2022-07-26 练习答案,自己做的
Thirty-four




练习答案,自己做的。 出问题的地方就continue那儿是经过几次验证得出来的。
package compare;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Random;

public class Practice {
	public static void main(String[] args) {
	String Str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	Random Ran=new Random();
		String S[][]=new String[5][20];
		char ch[]=new char[2];
	for(int j=0;j<S.length;j++) {
		for(int a=0;a<S[j].length;a++) {
			for(int i=0;i<ch.length;i++) {
			int num=Ran.nextInt(Str.length());
			ch[i]=Str.charAt(num);
					}
		S[j][a]=new String(ch);
		System.out.print(S[j][a]+" ");
				}
		System.out.println();
		}
	String s0[]=new String[100];
	System.out.println("将二维数组转为一维数组便于查找重复字符转:");
for(int i=0;i<S.length;i++) {
System.arraycopy(S[i], 0, s0, 20*i, S[i].length);
	}
System.out.println(Arrays.toString(s0));
//查找重复字符串
	String st="";//此字符串用来存储重复的字符串
	int a=0;
		for(int j=0;j<s0.length-1;j++) {
			for(int k=j+1;k<s0.length;k++) {
				//如果出现st已经收录的字符串就跳过本次循环
				if(st.contains(s0[k])) {
					continue;//一定不能用break;比如:z,x,c,v,b,x,t,s,c
					//x已经被st收录,当s0[j]="c"时,s0[k]为b后面的这个x时,用break的话s后面的c
					//就无法检测导致st不能收录c,此时就会出现错误
				}
				//收录重复的字符串,并计数
				if(s0[j].equals(s0[k])) {
					st+=s0[j]+" ";
					a++;
					break;
				}
			}
		}
	String st1[]=st.split(" ");
	System.out.println("总共有"+a+"种重复的字符串\n"+"分别是:\t");
	for(String s:st1) {
		System.out.print(s+" ");
	}
	}
}

							


1 个答案

XiaoBLee
答案时间:2022-08-06
public static void main(String[] args) { Test(); } //比较字符串 public static void Test(){ int counts = 0; String[] strs = new String[100]; char[] chars = new char[2]; System.out.println("生成长度为100的随机字符串数组如下:"); //生成长度为100的随机字符串数组 for (int i = 0; i < strs.length ; i++) { //生成长度为2的字符数组 for (int j = 0; j < chars.length; j++) { char ch = (char) (Math.random()*57+65) ; if (90<=ch&ch<=96){ j--; }else chars[j] = ch; } strs[i]=String.valueOf(chars); System.out.print(strs[i]+"\t"); } //判断相同字符串的个数 for (int i = 0; i <strs.length; i++) { for (int j = 0; j < strs.length; j++) { if (strs[i].equals(strs[j])){ counts++; } } } //存在自身比较,总计100次 int result = counts-100; System.out.println("\n相同的字符串个数为"+result); } }



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2022-07-22 练习答案,自己做的
2022-05-26 答案
2022-04-29 增加一个开关用来判断


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 106 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 基础-数字与字符串-比较字符串 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图