像梦一样奔驰|个精致的 Java 字符串操作小技巧,学它,OMG,12( 三 )


咦 , 拆分个字符串都这么讲究
07、如何检查两个字符串中的字符是相同的?如何理解这道题呢?比如说 , 字符串“沉默王二”和“沉王二默”就用了同样的字符 , 对吧?比如说 , 字符串“沉默王二”和“沉默王三”用的字符就不同 , 理解了吧?
publicclassCheckSameCharsInString{publicstaticvoidmain(String[]args){sameCharsStrings("沉默王二","沉王二默");sameCharsStrings("沉默王二","沉默王三");}privatestaticvoidsameCharsStrings(Strings1,Strings2){Setset1=s1.chars().mapToObj(c->(char)c).collect(Collectors.toSet());System.out.println(set1);Setset2=s2.chars().mapToObj(c->(char)c).collect(Collectors.toSet());System.out.println(set2);System.out.println(set1.equals(set2));}}输出结果如下所示:
[默,沉,王,二][默,沉,王,二]true[默,沉,王,二][默,沉,三,王]false上面的代码用到了Stream流 , 看起来很陌生 , 但很好理解 , 就是把字符串拆成字符 , 然后收集到Set中 , Set是一个不允许有重复元素的集合 , 所以就把字符串中的不同字符收集起来了 。
08、如何判断一个字符串包含了另外一个字符串?这道题有点简单 , 对吧?上一道还用Stream流 , 这道题就直接送分了?不用怀疑自己 , 就用字符串类的contains()方法 。
publicclassStringContainsSubstring{publicstaticvoidmain(String[]args){Strings1="沉默王二";Strings2="沉默";System.out.println(s1.contains(s2));}}输出结果如下所示:
truecontains()方法内部其实调用的是indexOf()方法:
publicbooleancontains(CharSequences){returnindexOf(s.toString())>=0;}09、如何在不用第三个变量的情况下交换两个字符串?这道题就有点意思了 , 对吧?尤其是前提条件 , 不使用第三个变量 。
publicclassSwapTwoStrings{publicstaticvoidmain(String[]args){Strings1="沉默";Strings2="王二";s1=s1.concat(s2);s2=s1.substring(0,s1.length()-s2.length());s1=s1.substring(s2.length());System.out.println(s1);System.out.println(s2);}}输出结果如下所示:
王二沉默说一下我的思路:
1)通过concat()方法把两个字符串拼接到一块 。
2)然后通过substring()方法分别取出第二个字符串和第一个字符串 。
10、如何从字符串中找出第一个不重复的字符?来 , 上个例子来理解一下这道题 。 比如说字符串“沉默王沉沉默二” , 第一个不重复的字符是“王” , 对吧?因为“沉”重复了 , “默”重复了 。
publicclassFindNonRepeatingChar{publicstaticvoidmain(String[]args){System.out.println(printFirstNonRepeatingChar("沉默王沉沉默二"));System.out.println(printFirstNonRepeatingChar("沉默王沉"));System.out.println(printFirstNonRepeatingChar("沉沉沉"));}privatestaticCharacterprintFirstNonRepeatingChar(Stringstring){char[]chars=string.toCharArray();ListdiscardedChars=newArrayList<>();for(inti=0;i输出结果如下所示:
王默null说一下我的思路:
1)把字符串拆分成字符数组 。
2)声明一个List , 把重复的字符放进去 。
3)外层的for循环 , 从第一个字符开始 , 如果已经在List中 , 继续下一轮 。
4)嵌套的for循环 , 从第一个字符的下一个字符(j=i+1)开始遍历 , 如果找到和之前字符重复的 , 就加入到List中 , 跳出内层的循环;如果找到最后(j==chars.length-1)也没有找到 , 就是第一个不重复的字符 , 对吧?
11、如何检查字符串中只包含数字?有一种很傻的解法 , 就是用Long.parseLong(string)对字符串强转 , 如果转不成整形 , 那肯定不是只包含数字 , 对吧?


推荐阅读