JavaString中移除空⽩字符的多种⽅式汇总
前⾔
字符串,是Java中最常⽤的⼀个数据类型了。我们在⽇常开发时候会经常使⽤字符串做很多的操作。⽐如字符串的拼接、截断、替换等。
这⼀篇⽂章,我们介绍⼀个⽐较常见⼜容易被忽略的⼀个操作,那就是移除字符串中的空格。
其实,在Java中从字符串中删除空格有很多不同的⽅法,如trim,replaceAll等。但是,在Java 11添加了⼀些新的功能,如strip、stripLeading、stripTrailing等。
⼤多数时候,我们只是使⽤trim⽅法来删除多余的空格。但是好像很多⼈并没有去思考过,是否有更好的⽅式呢?
当然,trim()在⼤多数情况下都⼯作得很好,但是Java中有许多不同的⽅法。每⼀种都有⾃⼰的优点和缺点。我们如何决定哪种⽅法最适合我们呢?
接下来我们将介绍⼏种⽅法,并对⽐下他们的区别和优缺点等。
在java中从字符串中删除空格的不同⽅法
⾸先,我们来看⼀下,想要从String中移除空格部分,有多少种⽅法,作者根据经验,总结了以下7种(JDK原⽣⾃带的⽅法,不包含第三⽅⼯具类库中的类似⽅法):
trim() : 删除字符串开头和结尾的空格。
strip() : 删除字符串开头和结尾的空格。
stripLeading() : 只删除字符串开头的空格
stripTrailing() : 只删除字符串的结尾的空格
replace() : ⽤新字符替换所有⽬标字符
replaceAll() : 将所有匹配的字符替换为新字符。此⽅法将正则表达式作为输⼊,以标识需要替换的⽬标⼦字符串
replaceFirst() : 仅将⽬标⼦字符串的第⼀次出现的字符替换为新的字符串
需要注意的最重要的⼀点是,在Java中String对象是不可变的,这意味着我们不能修改字符串,因此以上所有的⽅法我们得到的都是⼀个新的字符串。
接下啦,我们分别针对以上这⼏个⽅法学习下⽤法,了解下其特性。
trim
trim()是Java开发⼈员最常⽤的删除字符串开头和结尾的空格⽅法。其⽤法也⽐较简单:
public class StringTest {
public static void main(String[] args) {
String stringWithSpace = " Hollis Is A Java Coder ";
}
private static void trimTest(String stringWithSpace){
System.out.println("Before trim : \'" + stringWithSpace + "\'");
String stringAfterTrim = im();
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的任何字符(' U+0020 '):
其中包含了空格、换⾏、退格等字符。
strip()
不知道⼤家有没有注意到,在Java 11的发⾏版中,添加了新的strip()⽅法来删除字符串中的前导和末尾空格。
已经有了⼀个trim⽅法,为什么还要新增⼀个strip呢?
这其实是是因为trim⽅法只能针对ASCII值⼩于等于32的字符进⾏移除,但是根据Unicode标准,除了ASCII中的字符以外,还是有很多其他的空⽩字符的。
⽽在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 : true
Before strip : '  Hollis Is A Java Coder  '
After strip : 'Hollis Is A Java Coder'
所以,Java 11 中的 strip ⽅法要⽐trim⽅法更加强⼤,他可以移除很多不在ASCII中的空⽩字符,判断⽅式就是通过Character.isWhitespace⽅法。
trim 和 strip ⽅法的区别
上⾯我们介绍了两个都可以移除字符串开头和结尾的⽅法,分别是trim 和 strip,再来对⽐下他们的区别:
|trim|strip| |---|---| Java 1引⼊|Java 11引⼊使⽤ASCII|使⽤Unicode值删除开头和结尾的空⽩字符|删除开头和结尾的空⽩字符删除ASCII值⼩于或等于' U+0020 '或' 32 '的字符|根据unicode删除所有空格字符
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 : true
Before 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 ";
}
private static void replaceTest(String stringWithSpace){
System.out.println("Before replace : \'" + stringWithSpace + "\'");
String stringAfterTrim = place(" ", "");
System.out.println("After replace : \'" + stringAfterTrim + "\'");
}
}
结果:
Before replace : '  Hollis  Is  A  Java  Coder  '
After replace : 'HollisIsAJavaCoder'
可见,以上使⽤replace⽅法可以替换掉字符串中的所有空⽩字符。特别需要注意的是,replace⽅法和trim⽅法⼀样,只能替换掉ASCII中的空⽩字符。
replaceAll
replaceAll是Java 1.4中添加的最强⼤的字符串操作⽅法之⼀。我们可以将这种⽅法⽤于许多⽬的。
使⽤replaceAll()⽅法,我们可以使⽤正则表达式来⽤来识别需要被替换的⽬标字符内容。使⽤正则表达式,就可以实现很多功能,如删除所有空格,删除开头空格,删除结尾空格等等。
我们只需要⽤正确的替换参数创建正确的正则表达式。⼀些正则表达式的例⼦如下:
\s+  所有的空⽩字符
^\s+      字符串开头的所有空⽩字符
\s+$      字符串结尾的所有空⽩字符
注意,在java中要添加/我们必须使⽤转义字符,所以对于\s+ 我们必须使⽤\\s+
public class StringTest {
public static void main(String args[]) {
String stringWithSpace =" Hollis  Is  A  Java  Coder ";
}
private static void replaceAllTest(String stringWithSpace,String regex){
java replace方法
System.out.println("Before replaceAll with '"+ regex +"': \'" + stringWithSpace + "\'");
String stringAfterTrim = placeAll(regex, "");
System.out.println("After replaceAll with '"+ regex +"': \'" + stringAfterTrim + "\'");
}
}
结果:
Before replaceAll with ' ': '  Hollis  Is  A  Java  Coder  '
After replaceAll with ' ': 'HollisIsAJavaCoder'
Before replaceAll with '\s+': '  Hollis  Is  A  Java  Coder  '
After replaceAll with '\s+': 'HollisIsAJavaCoder'
Before 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()与适当的正则表达式⼀起使⽤,它将是⾮常强⼤的⽅法。
replaceFirst
replaceFirst⽅法也是在java 1.4中添加的,它只将给定正则表达式的第⼀个匹配项替换为替换字符串。
如果您只需要替换第⼀次出现的情况,那么这个⽅法⾮常有⽤。例如,如果我们只需要删除前导空格,我们可以使⽤\\s+或^\\s+。
我们还可以通过使⽤\\s+$正则表达式使⽤此⽅法来删除末尾空格。因为这个表达式将只匹配⾏的最后⼀个空格。因此最后的空格被认为是这个⽅法的第⼀个匹配。
让我们举⼀个从字符串中删除前导和尾随空格的例⼦
public class StringTest {
public static void main(String args[]) {
String stringWithSpace =" Hollis  Is  A  Java  Coder ";
}
private static void replaceFirstTest(String stringWithSpace,String regex){
System.out.println("Before replaceFirst with '"+ regex +"': \'" + stringWithSpace + "\'");
String stringAfterTrim = placeFirst(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进⾏判断。
到此这篇关于Java String中移除空⽩字符的多种⽅式的⽂章就介绍到这了,更多相关Java String移除空⽩字符内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。