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公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2024-07-26 将来学了Set再回过头来看,真是无脑求解
Bounds




如题
package StringsAndNumbers;

import java.util.HashSet;

public class CompareStrings {

    //创建一个长度是100的字符串数组
    //使用长度是2的随机字符填充该字符串数组
    //统计这个字符串数组里重复的字符串有多少种
    public static void main(String[] args) {

        String []ss = new String[100];
        //初始化数组
        for (int i = 0; i < ss.length; i++) {
           ss[i] = RandomString.RandomString_(2);
        }
        //打印数组
        System.out.println("随机生成的字符串数组:");
        for (int i = 0; i < ss.length; i++) {
            String s = ss[i];
            System.out.print(s+" ");
            //换行
            if (19 == i%20)
                System.out.println();
        }
        HashSet<String> uniqueStrings = new HashSet<>();
        HashSet<String> duplicateContent = new HashSet<>();
        for (String s : ss) {
            if (!uniqueStrings.add(s))
                duplicateContent.add(s);
        }
        System.out.println("找到了重复的字符串,共"+duplicateContent.size()+"种");
        System.out.println("分别是:"+duplicateContent);
    }
}

							


2 个答案

Zzz112138
答案时间:2024-09-03
一共生成100个随机字符串 NX kI 8d Hd i5 dB W0 H5 Xx sN au 10 2S 6r 7L iP cQ rA y9 7x 9E eV 41 kd d7 QU 5C Op 7f AY 58 9b 5K N2 0G 36 kL uC iy 34 L5 Hb ql Os AE l9 89 r9 1G NN 2S 4k E8 4g 4V Kf nH jW A5 pI VZ 4d D3 83 0f UX 4d ND 2w Yc U5 95 0K ve ND Ug n2 6D 46 vF s4 m8 dS eM 6O 1V 8K k9 d9 LK TR hB 6Y 3e 4X P2 ce jf p0 bx 共找到3个重复字符串 分别是: 2S[12] 4d[61] ND[67]

Zzz112138
答案时间:2024-09-03
一共生成100个随机字符串 1t V2 41 F0 bZ Jp Y2 d1 6Y x3 T6 ry J0 sW r6 m1 fE 7S KL 5W 31 ko q7 f2 cV b9 n7 YJ 7z 5B z0 b1 uh Tg G0 YK 53 WH 4B 1A EI cB kc 9B 85 wj Fn E5 ua Hd g6 Wy 6K 6D jG 62 M7 k2 qA bl 0k xG 75 eE aR Hf j5 k4 L4 Ci 14 5B 3Y ch th Cb u8 x4 ZS Pl 69 78 ry QE wd W8 4l Lt 1Z qa kw k4 Y4 NX mA 0W Sy Ca D5 1i 共找到3个重复字符串 分别是: ry[11] 5B[29] k4[67]



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





2024-07-04 正确求解比较字符串数组的问题与误区分析
虚心求学




以下是我的个人理解,恳请各位批评指正。 发现大家在解答比较字符串题目时,容易忽略一个问题: 题目要求的是找到重复的元素(无视大小写),且重复的单词只计一次数。 比如 aa Aa aA AA,这四个元素,大部分人的结果是:重复单词有3个,分别是:aa、Aa、aA;但请你仔细想想题目的要求,aa和Aa是同一个情况,不应该重复考虑。所以正确答案应该是,重复单词有1个,为:aa。 原因:有部分小伙伴在循环的时候,循环条件是这么写的: for(int i = 0;i<s.length;i++) { for(int j = i+1;j<s.length;j++) //第二层循环这么写,就可能会重复考虑一部分单词了,比如 aa AA aA这种情况。 //解决方法是 改成for(int j = 0;j<s.length;j++) ;然后加上两个判断条件: //1.判断 if(i==j)continue; //防止自己和自己比较 //2.判断 if(j<i) break; //前面有重复的就不重新考虑了 }
加载中
public static int countRepeat(String[] strs)  //直接调用这个方法,输入一个字符串数组即可计算出结果
		{
			StringBuilder head = new StringBuilder("\r\n重复的字符共有");
			StringBuilder sb = new StringBuilder("重复的字符如下:");
			int count = 0;
			
			for (int i = 0; i < strs.length; i++) {
				for (int j = 0; j < strs.length; j++) {
					if(i==j)continue;
					if(strs[i].equalsIgnoreCase(strs[j])){
						if(j<i)break;
						count++;
						sb.append(strs[i]);sb.append(" ");
						break;
						}
				}
			}
			head.append(count);head.append("个\r\n");
			sb.append("\r\n");
			System.out.println(head.toString()+sb.toString());
			return count;
		}

							


2 个答案

Old-k
答案时间:2024-07-08
虚心求学
答案时间:2024-07-04
在第二层循环,这么判断就对了
if(i==j)continue;
                    if(strs[i].equalsIgnoreCase(strs[j])){
                        if(j<i)break;
                        count++;



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





2024-07-03 练习5
2023-02-06 想了好久,
2023-01-30 这样可以吗


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

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

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

上传截图