△Hollis, 一个对Coding有着独特追求的人△
publicclassStringTest{publicstaticvoidmain(String[]args){StringstringWithSpace=”HollisIsAJavaCoder”;StringTest.trimTest(stringWithSpace);}privatestaticvoidtrimTest(StringstringWithSpace){System.out.println(“Beforetrim:\'” stringWithSpace “\'”);StringstringAfterTrim=stringWithSpace.trim();System.out.println(“Aftertrim:\'” stringAfterTrim “\'”);}}
输出结果:
Beforetrim:’HollisIsAJavaCoder’Aftertrim:’HollisIsAJavaCoder’
如上,使用trim之后,原字符串中开头和结尾部分的空格内容都被移除掉了。但是不知道大家有没有思考过,trim方法移除的空白内容都包含哪些东西?除了空格以外,还有其他的字符吗?其实,trim移除的空白字符指的是指ASCII值小于或等于32的任何字符(‘ U 0020 ‘):
??其中包含了空格、换行、退格等字符。strip()不知道大家有没有注意到,在Java 11的发行版中,添加了新的strip()方法来删除字符串中的前导和末尾空格。已经有了一个trim方法,为什么还要新增一个strip呢?这其实是是因为trim方法只能针对ASCII值小于等于32的字符进行移除,但是根据Unicode标准,除了ASCII中的字符以外,还是有很多其他的空白字符的。而且为了识别这些空格字符,从Java 1.5开始,还在Character类中添加了新的isWhitespace(int)方法。该方法使用unicode来标识空格字符。你可以在http://jkorpela.fi/chars/spaces.html 了解更多关于unicode空格字符的信息。
??而在Java 11中新增的这个strip方法就是使用这个Character.isWhitespace(int)方法来判断是否为空白字符并删除它们的:
??
??下面我们来看一个使用strip例子:
publicclassStringTest{publicstaticvoidmain(Stringargs[]){StringstringWithSpace=’\u2001′ “HollisIsAJavaCoder” ‘\u2001’;System.out.println(“‘” ‘\u2001’ “‘isspace:” Character.isWhitespace(‘\u2001’));StringTest.stripTest(stringWithSpace);}privatestaticvoidstripTest(StringstringWithSpace){System.out.println(“Beforestrip:\'” stringWithSpace “\'”);StringstringAfterTrim=stringWithSpace.strip();System.out.println(“Afterstrip:\'” stringAfterTrim “\'”);}}
我们在字符串前后都增加了一个特殊的字符\u2001,这个字符是不在ASCII中的,经过Character.isWhitespace判断他是一个空白字符。然后使用strip进行处理,输出结果如下:
‘??’isspace:trueBeforestrip:’HollisIsAJavaCoder’Afterstrip:’HollisIsAJavaCoder’
所以,Java 11 中的 strip 方法要比trim方法更加强大,他可以移除很多不在ASCII中的空白字符,判断方式就是通过Character.isWhitespace方法。trim 和 strip 方法的区别上面我们介绍了两个都可以移除字符串开头和结尾的方法,分别是trim 和 strip,再来对比下他们的区别:
stripLeading() 和 stripTrailing()stripLeading()和stripTrailing()方法也都是在Java 11中添加的。作用分别是删除字符串的开头的空格以及删除字符串的末尾的空格。与strip方法类似,stripLeading、stripTrailing也使用Character.isWhitespace(int)来标识空白字符。用法也和strip类似:
publicclassStringTest{publicstaticvoidmain(Stringargs[]){StringstringWithSpace=’\u2001′ “HollisIsAJavaCoder” ‘\u2001’;System.out.println(“‘” ‘\u2001’ “‘isspace:” Character.isWhitespace(‘\u2001’));StringTest.stripLeadingTest(stringWithSpace);StringTest.stripTrailingTest(stringWithSpace);}privatestaticvoidstripLeadingTest(StringstringWithSpace){System.out.println(“BeforestripLeading:\'” stringWithSpace “\'”);StringstringAfterTrim=stringWithSpace.stripLeading();System.out.println(“AfterstripLeading:\'” stringAfterTrim “\'”);}privatestaticvoidstripTrailingTest(StringstringWithSpace){System.out.println(“BeforestripTrailing:\'” stringWithSpace “\'”);StringstringAfterTrim=stringWithSpace.stripTrailing();System.out.println(“AfterstripTrailing:\'” stringAfterTrim “\'”);}}
输出结果:
‘??’isspace:trueBeforestripLeading:’HollisIsAJavaCoder’AfterstripLeading:’HollisIsAJavaCoder’BeforestripTrailing:’HollisIsAJavaCoder’AfterstripTrailing:’HollisIsAJavaCoder’
replace移除字符串中的空白字符,除了使用trim、strip以外,还有一个办法,那就是使用replace方法把其中的空白字符替换掉。replace是从java 1.5中添加的,可以用指定的字符串替换每个目标子字符串。此方法替换所有匹配的目标元素,使用方式如下:
publicclassStringTest{publicstaticvoidmain(Stringargs[]){StringstringWithSpace=”HollisIsAJavaCoder”;StringTest.replaceTest(stringWithSpace);}privatestaticvoidreplaceTest(StringstringWithSpace){System.out.println(“Beforereplace:\'” stringWithSpace “\'”);StringstringAfterTrim=stringWithSpace.replace(“”,””);System.out.println(“Afterreplace:\'” stringAfterTrim “\'”);}}
结果:
Beforereplace:’HollisIsAJavaCoder’Afterreplace:’HollisIsAJavaCoder’
可见,以上使用replace方法可以替换掉字符串中的所有空白字符。特别需要注意的是,replace方法和trim方法一样,只能替换掉ASCII中的空白字符。replaceAllreplaceAll是Java 1.4中添加的最强大的字符串操作方法之一。我们可以将这种方法用于许多目的。使用replaceAll()方法,我们可以使用正则表达式来用来识别需要被替换的目标字符内容。使用正则表达式,就可以实现很多功能,如删除所有空格,删除开头空格,删除结尾空格等等。我们只需要用正确的替换参数创建正确的正则表达式。一些正则表达式的例子如下:
\s 所有的空白字符^\s 字符串开头的所有空白字符\s $字符串结尾的所有空白字符
注意,在java中要添加/我们必须使用转义字符,所以对于\s 我们必须使用 \\s
publicclassStringTest{publicstaticvoidmain(Stringargs[]){StringstringWithSpace=”HollisIsAJavaCoder”;StringTest.replaceAllTest(stringWithSpace,””);StringTest.replaceAllTest(stringWithSpace,”\\s “);StringTest.replaceAllTest(stringWithSpace,”^\\s “);StringTest.replaceAllTest(stringWithSpace,”\\s $”);}privatestaticvoidreplaceAllTest(StringstringWithSpace,Stringregex){System.out.println(“BeforereplaceAllwith'” regex “‘:\'” stringWithSpace “\'”);StringstringAfterTrim=stringWithSpace.replaceAll(regex,””);System.out.println(“AfterreplaceAllwith'” regex “‘:\'” stringAfterTrim “\'”);}}
结果:
BeforereplaceAllwith”:’HollisIsAJavaCoder’AfterreplaceAllwith”:’HollisIsAJavaCoder’BeforereplaceAllwith’\s ‘:’HollisIsAJavaCoder’AfterreplaceAllwith’\s ‘:’HollisIsAJavaCoder’BeforereplaceAllwith’^\s ‘:’HollisIsAJavaCoder’AfterreplaceAllwith’^\s ‘:’HollisIsAJavaCoder’BeforereplaceAllwith’\s $’:’HollisIsAJavaCoder’AfterreplaceAllwith’\s $’:’HollisIsAJavaCoder’
正如我们所看到的,如果将replaceAll()与适当的正则表达式一起使用,它将是非常强大的方法。replaceFirstreplaceFirst方法也是在java 1.4中添加的,它只将给定正则表达式的第一个匹配项替换为替换字符串。如果您只需要替换第一次出现的情况,那么这个方法非常有用。例如,如果我们只需要删除前导空格,我们可以使用\\s 或^\\s 。我们还可以通过使用\\s $正则表达式使用此方法来删除末尾空格。因为这个表达式将只匹配行的最后一个空格。因此最后的空格被认为是这个方法的第一个匹配。让我们举一个从字符串中删除前导和尾随空格的例子
publicclassStringTest{publicstaticvoidmain(Stringargs[]){StringstringWithSpace=”HollisIsAJavaCoder”;StringTest.replaceFirstTest(stringWithSpace,””);StringTest.replaceFirstTest(stringWithSpace,”\\s “);StringTest.replaceFirstTest(stringWithSpace,”^\\s “);StringTest.replaceFirstTest(stringWithSpace,”\\s $”);}privatestaticvoidreplaceFirstTest(StringstringWithSpace,Stringregex){System.out.println(“BeforereplaceFirstwith'” regex “‘:\'” stringWithSpace “\'”);StringstringAfterTrim=stringWithSpace.replaceFirst(regex,””);System.out.println(“AfterreplaceFirstwith'” regex “‘:\'” stringAfterTrim “\'”);}}
结果:
BeforereplaceFirstwith”:’HollisIsAJavaCoder’AfterreplaceFirstwith”:’HollisIsAJavaCoder’BeforereplaceFirstwith’\s ‘:’HollisIsAJavaCoder’AfterreplaceFirstwith’\s ‘:’HollisIsAJavaCoder’BeforereplaceFirstwith’^\s ‘:’HollisIsAJavaCoder’AfterreplaceFirstwith’^\s ‘:’HollisIsAJavaCoder’BeforereplaceFirstwith’\s $’:’HollisIsAJavaCoder’AfterreplaceFirstwith’\s $’:’HollisIsAJavaCoder’
总结本文介绍了7种移除字符串中的空白字符的方法。想要直接移除掉字符串开头的空白字符,可以使用stripLeading、replaceAll和replaceFirst想要直接移除掉字符串末尾的空白字符,可以使用stripTrailing、replaceAll和replaceFirst想要同时移除掉字符串开头和结尾的空白字符,可以使用strip、trim想要移除掉字符串中的所有空白字符,可以使用replace和replaceAll而Java 11种新增的strip、stripTrailing以及stripLeading方法,可以移除的字符要比其他方法多,他可以移除的空白字符不仅仅局限于ASCII中的字符,而是Unicode中的所有空白字符,具体判断方式可以使用Character.isWhitespace进行判断。