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


03、如何判断一个字符串是前后对称的?什么意思呢?就好像一个字符串 , 前后一折 , 是对称的 。 就像你站在镜子前 , 看到了一个玉树临风、闭月羞花的自己 。
publicclassPalindromeString{publicstaticvoidmain(String[]args){checkPalindromeString("沉默王二");checkPalindromeString("沉默王二二王默沉");}privatestaticvoidcheckPalindromeString(Stringinput){booleanresult=true;intlength=input.length();for(inti=0;i输出结果如下所示:
沉默王二对称吗?false沉默王二二王默沉对称吗?true说一下我的思路:要判断字符串对折后是否对称 , 很简单 , 从中间劈开 , 第一个字符对照最后一个字符 , 一旦找到不等的那个 , 就返回false 。
注意三点:
1)for循环的下标从0开始 , 到length/2结束 。
2)下标i和length-i-1是对称的 。
3)一旦false就break 。
04、如何删除所有出现的指定字符?字符串类没有提供remove()方法 , 但提供了replaceAll()方法 , 通过将指定的字符替换成空白字符就可以办得到 , 对吧?
publicclassRemoveCharFromString{publicstaticvoidmain(String[]args){removeCharFromString("沉默王二",'二');removeCharFromString("chenmowanger",'n');}privatestaticvoidremoveCharFromString(Stringinput,charc){Stringresult=input.replaceAll(String.valueOf(c),"");System.out.println(result);}}输出结果如下所示:
沉默王chemowager05、如何证明字符串是不可变的?字符串不可变的这个事我曾写过两篇文章 , 写到最后我都要吐了 。 但是仍然会有一些同学弄不明白 , 隔段时间就有人私信我 , 我就不得不把之前的文章放到收藏夹 , 问的时候我就把链接发给他 。
之所以造成这个混乱 , 有很多因素 , 比如说 , Java到底是值传递还是引用传递?字符串常量池是个什么玩意?
这次又不得不谈 , 虽然烦透了 , 但仍然要证明啊!
publicclassStringImmutabilityTest{publicstaticvoidmain(String[]args){Strings1="沉默王二";Strings2=s1;System.out.println(s1==s2);s1="沉默王三";System.out.println(s1==s2);System.out.println(s2);}}输出结果如下所示:
truefalse沉默王二1)Strings1="沉默王二" , Java在字符串常量池中创建“沉默王二”这串字符的对象 , 并且把地址引用赋值给s1
2)Strings2=s1 , s2和s1指向了同一个地址引用——常量池中的那个“沉默王二” 。
所以 , 此时s1==s2为true 。
3)s1="沉默王三" , Java在字符串常量池中创建“沉默王三”这串字符的对象 , 并且把地址引用赋值给s1 , 但s2仍然指向的是“沉默王二”那串字符对象的地址引用 。
所以 , 此时s1==s2为false , s2的输出结果为“沉默王二”就证明了字符串是不可变的 。
06、如何统计字符串中的单词数?这道题呢?主要针对的是英文字符串的情况 。 虽然中文字符串中也可以有空白字符 , 但不存在单词这一说 。
publicclassCountNumberOfWordsInString{publicstaticvoidmain(String[]args){countNumberOfWords("MynameisWanger");countNumberOfWords("ILoveJavaProgramming");countNumberOfWords("Javaisveryimportant");}privatestaticvoidcountNumberOfWords(Stringline){StringtrimmedLine=line.trim();intcount=trimmedLine.isEmpty()?0:trimmedLine.split("s+").length;System.out.println(count);}}输出结果如下所示:
444split()方法可以对字符串进行拆分 , 参数不仅可以是空格 , 也可以使正则表达式代替的空白字符(多个空格、制表符);返回的是一个数组 , 通过length就可以获得单词的个数了 。
如果对split()方法很感兴趣的话 , 可以查看我之前写的一篇文章 , 很饱满 , 很丰富 。


推荐阅读