找设计师网站,网站开发实训教程,建一个个人网站要多少钱,襄阳做网站公司有哪些字符串#xff0c;是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。本文我们介绍一个比较常见又容易被忽略的一个操作#xff0c;那就是移除字符串中的空格。其实#xff0c;在Java中从字符串中删除空格… 字符串是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。本文我们介绍一个比较常见又容易被忽略的一个操作那就是移除字符串中的空格。其实在Java中从字符串中删除空格有很多不同的方法如trimreplaceAll等。但是在Java 11添加了一些新的功能如strip、stripLeading、stripTrailing等。大多数时候我们只是使用trim方法来删除多余的空格。但是好像很多人并没有去思考过是否有更好的方式呢当然trim()在大多数情况下都工作得很好但是Java中有许多不同的方法。每一种都有自己的优点和缺点。我们如何决定哪种方法最适合我们呢接下来我们将介绍几种方法并对比下他们的区别和优缺点等。在java中从字符串中删除空格的不同方法首先我们来看一下想要从String中移除空格部分有多少种方法作者根据经验总结了以下7种JDK原生自带的方法不包含第三方工具类库中的类似方法trim() : 删除字符串开头和结尾的空格。strip() : 删除字符串开头和结尾的空格。stripLeading() : 只删除字符串开头的空格stripTrailing() : 只删除字符串的结尾的空格replace() : 用新字符替换所有目标字符replaceAll() : 将所有匹配的字符替换为新字符。此方法将正则表达式作为输入以标识需要替换的目标子字符串replaceFirst() : 仅将目标子字符串的第一次出现的字符替换为新的字符串需要注意的最重要的一点是在Java中String对象是不可变的这意味着我们不能修改字符串因此以上所有的方法我们得到的都是一个新的字符串。接下啦我们分别针对以上这几个方法学习下用法了解下其特性。PS本文代码都是使用在线运行工具https://www.jdoodle.com/online-java-compiler/ 执行的因为我的测试机并未安装Java 11并且Unicode字符也不完整。如果大家也想实验建议使用在线工具选择对应的JDK即可。trimtrim()是Java开发人员最常用的删除字符串开头和结尾的空格方法。其用法也比较简单public class StringTest {public static void main(String[] args) {String stringWithSpace Hollis Is A Java Coder ;StringTest.trimTest(stringWithSpace);}private static void trimTest(String stringWithSpace){System.out.println(Before trim : \ stringWithSpace \);String stringAfterTrim stringWithSpace.trim();System.out.println(After trim : \ stringAfterTrim \);}}
输出结果Before trim : Hollis Is A Java Coder After trim : Hollis Is A Java Coder
如上使用trim之后原字符串中开头和结尾部分的空格内容都被移除掉了。但是不知道大家有没有思考过trim方法移除的空白内容都包含哪些东西除了空格以外还有其他的字符吗其实trim移除的空白字符指的是指ASCII值小于或等于32的任何字符( U0020 )其中包含了空格、换行、退格等字符。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例子public class StringTest {public static void main(String args[]) {String stringWithSpace \u2001 Hollis Is A Java Coder \u2001;System.out.println( \u2001 is space : Character.isWhitespace(\u2001));StringTest.stripTest(stringWithSpace);}private static void stripTest(String stringWithSpace){System.out.println(Before strip : \ stringWithSpace \);String stringAfterTrim stringWithSpace.strip();System.out.println(After strip : \ stringAfterTrim \);}}
我们在字符串前后都增加了一个特殊的字符\u2001这个字符是不在ASCII中的经过Character.isWhitespace判断他是一个空白字符。然后使用strip进行处理输出结果如下 is space : trueBefore strip : Hollis Is A Java Coder After strip : Hollis Is A Java Coder
所以Java 11 中的 strip 方法要比trim方法更加强大他可以移除很多不在ASCII中的空白字符判断方式就是通过Character.isWhitespace方法。trim 和 strip 方法的区别上面我们介绍了两个都可以移除字符串开头和结尾的方法分别是trim 和 strip再来对比下他们的区别stripLeading() 和 stripTrailing()stripLeading()和stripTrailing()方法也都是在Java 11中添加的。作用分别是删除字符串的开头的空格以及删除字符串的末尾的空格。与strip方法类似stripLeading、stripTrailing也使用Character.isWhitespace(int)来标识空白字符。用法也和strip类似public class StringTest {public static void main(String args[]) {String stringWithSpace \u2001 Hollis Is A Java Coder \u2001;System.out.println( \u2001 is space : Character.isWhitespace(\u2001));StringTest.stripLeadingTest(stringWithSpace);StringTest.stripTrailingTest(stringWithSpace);}private static void stripLeadingTest(String stringWithSpace){System.out.println(Before stripLeading : \ stringWithSpace \);String stringAfterTrim stringWithSpace.stripLeading();System.out.println(After stripLeading : \ stringAfterTrim \);}private static void stripTrailingTest(String stringWithSpace){System.out.println(Before stripTrailing : \ stringWithSpace \);String stringAfterTrim stringWithSpace.stripTrailing();System.out.println(After stripTrailing : \ stringAfterTrim \);}}
输出结果 is space : trueBefore stripLeading : Hollis Is A Java Coder After stripLeading : Hollis Is A Java Coder Before stripTrailing : Hollis Is A Java Coder After stripTrailing : Hollis Is A Java Coder
replace移除字符串中的空白字符除了使用trim、strip以外还有一个办法那就是使用replace方法把其中的空白字符替换掉。replace是从java 1.5中添加的可以用指定的字符串替换每个目标子字符串。此方法替换所有匹配的目标元素使用方式如下 public class StringTest {public static void main(String args[]) {String stringWithSpace Hollis Is A Java Coder ;StringTest.replaceTest(stringWithSpace);}private static void replaceTest(String stringWithSpace){System.out.println(Before replace : \ stringWithSpace \);String stringAfterTrim stringWithSpace.replace( , );System.out.println(After replace : \ stringAfterTrim \);}}
结果Before replace : Hollis Is A Java Coder After replace : HollisIsAJavaCoder
可见以上使用replace方法可以替换掉字符串中的所有空白字符。特别需要注意的是replace方法和trim方法一样只能替换掉ASCII中的空白字符。replaceAllreplaceAll是Java 1.4中添加的最强大的字符串操作方法之一。我们可以将这种方法用于许多目的。使用replaceAll()方法我们可以使用正则表达式来用来识别需要被替换的目标字符内容。使用正则表达式就可以实现很多功能如删除所有空格删除开头空格删除结尾空格等等。我们只需要用正确的替换参数创建正确的正则表达式。一些正则表达式的例子如下:\s 所有的空白字符^\s 字符串开头的所有空白字符\s$ 字符串结尾的所有空白字符
注意在java中要添加/我们必须使用转义字符所以对于\s 我们必须使用 \\spublic class StringTest {public static void main(String args[]) {String stringWithSpace Hollis Is A Java Coder ;StringTest.replaceAllTest(stringWithSpace, );StringTest.replaceAllTest(stringWithSpace,\\s);StringTest.replaceAllTest(stringWithSpace,^\\s);StringTest.replaceAllTest(stringWithSpace,\\s$);}private static void replaceAllTest(String stringWithSpace,String regex){System.out.println(Before replaceAll with regex : \ stringWithSpace \);String stringAfterTrim stringWithSpace.replaceAll(regex, );System.out.println(After replaceAll with regex : \ stringAfterTrim \);}}
结果Before replaceAll with : Hollis Is A Java Coder After replaceAll with : HollisIsAJavaCoderBefore replaceAll with \s: Hollis Is A Java Coder After replaceAll with \s: HollisIsAJavaCoderBefore replaceAll with ^\s: Hollis Is A Java Coder After replaceAll with ^\s: Hollis Is A Java Coder Before replaceAll with \s$: Hollis Is A Java Coder After replaceAll with \s$: Hollis Is A Java Coder
正如我们所看到的如果将replaceAll()与适当的正则表达式一起使用它将是非常强大的方法。replaceFirstreplaceFirst方法也是在java 1.4中添加的它只将给定正则表达式的第一个匹配项替换为替换字符串。如果您只需要替换第一次出现的情况那么这个方法非常有用。例如如果我们只需要删除前导空格我们可以使用\\s或^\\s。我们还可以通过使用\\s$正则表达式使用此方法来删除末尾空格。因为这个表达式将只匹配行的最后一个空格。因此最后的空格被认为是这个方法的第一个匹配。让我们举一个从字符串中删除前导和尾随空格的例子public class StringTest {public static void main(String args[]) {String stringWithSpace Hollis Is A Java Coder ;StringTest.replaceFirstTest(stringWithSpace, );StringTest.replaceFirstTest(stringWithSpace,\\s);StringTest.replaceFirstTest(stringWithSpace,^\\s);StringTest.replaceFirstTest(stringWithSpace,\\s$);}private static void replaceFirstTest(String stringWithSpace,String regex){System.out.println(Before replaceFirst with regex : \ stringWithSpace \);String stringAfterTrim stringWithSpace.replaceFirst(regex, );System.out.println(After replaceFirst with regex : \ stringAfterTrim \);}}
结果Before replaceFirst with : Hollis Is A Java Coder After replaceFirst with : Hollis Is A Java Coder Before replaceFirst with \s: Hollis Is A Java Coder After replaceFirst with \s: Hollis Is A Java Coder Before replaceFirst with ^\s: Hollis Is A Java Coder After replaceFirst with ^\s: Hollis Is A Java Coder Before replaceFirst with \s$: Hollis Is A Java Coder After replaceFirst with \s$: Hollis Is A Java Coder
总结本文介绍了7种移除字符串中的空白字符的方法。想要直接移除掉字符串开头的空白字符可以使用stripLeading、replaceAll和replaceFirst想要直接移除掉字符串末尾的空白字符可以使用stripTrailing、replaceAll和replaceFirst想要同时移除掉字符串开头和结尾的空白字符可以使用strip、trim想要移除掉字符串中的所有空白字符可以使用replace和replaceAll而Java 11种新增的strip、stripTrailing以及stripLeading方法可以移除的字符要比其他方法多他可以移除的空白字符不仅仅局限于ASCII中的字符而是Unicode中的所有空白字符具体判断方式可以使用Character.isWhitespace进行判断。
往期推荐
磊哥工作十几年了竟没有用过do-while文末送书2020-09-06 多图证明Java到底是值传递还是引用传递2020-09-02 阿里为什么推荐使用LongAdder而不是volatile2020-08-25 关注下方二维码收获更多干货