java字符串空⽩字符_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'
java replace方法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[]) {
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论