【发布时间】:2013-06-03 04:19:30
【问题描述】:
trim() 函数会同时删除尾随和前导空格,但是,如果我只想删除字符串的尾随空格,我该怎么做呢?
【问题讨论】:
trim() 函数会同时删除尾随和前导空格,但是,如果我只想删除字符串的尾随空格,我该怎么做呢?
【问题讨论】:
如果您使用的是 JDK 11 或更高版本,您可能应该使用 stripTrailing()。
使用正则表达式\s++$,您可以将所有尾随空格字符(包括空格和制表符)替换为空字符串("")。
final String text = " foo ";
System.out.println(text.replaceFirst("\\s++$", ""));
输出
foo
下面是正则表达式的细分:
\s – 任何空白字符,++ – 匹配一个或多个前一个令牌(可能);即,匹配一个或多个空白字符。 + 模式在其possessive form ++ 中使用,当模式不匹配时,它会花费更少的时间来检测大小写。$ – 字符串的结尾。因此,正则表达式将尽可能多地匹配紧跟在字符串末尾的空格:换句话说,就是尾随空格。
如果您以后需要扩展您的需求,学习正则表达式的投资将变得更有价值。
参考文献
【讨论】:
另一种选择是使用 Apache Commons StringUtils,特别是 StringUtils.stripEnd
String stripped = StringUtils.stripEnd(" my lousy string "," ");
【讨论】:
android 标记您的问题,因为android 不是Java。
我稍微修改了原来的java.lang.String.trim() 方法,它应该可以工作:
public String trim(String str) {
int len = str.length();
int st = 0;
char[] val = str.toCharArray();
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return str.substring(st, len);
}
测试:
Test test = new Test();
String sample = " Hello World "; // A String with trailing and leading spaces
System.out.println(test.trim(sample) + " // No trailing spaces left");
输出:
Hello World // No trailing spaces left
【讨论】:
截至JDK11,您可以使用stripTrailing:
String result = str.stripTrailing();
【讨论】:
最实用的答案是@Micha's,Ahmad's 与您想要的完全相反,但如果您不想使用不熟悉的工具或查看具体方法,这就是我想出的.
public String trimEnd( String myString ) {
for ( int i = myString.length() - 1; i >= 0; --i ) {
if ( myString.charAt(i) == ' ' ) {
continue;
} else {
myString = myString.substring( 0, ( i + 1 ) );
break;
}
}
return myString;
}
像这样使用:
public static void main( String[] args ) {
String s = " Some text here ";
System.out.println( s + "|" );
s = trimEnd( s );
System.out.println( s + "|" );
}
输出:
Some text here | Some text here|
【讨论】:
我认为最好的方法:
public static String trimEnd(String source) {
int pos = source.length() - 1;
while ((pos >= 0) && Character.isWhitespace(source.charAt(pos))) {
pos--;
}
pos++;
return (pos < source.length()) ? source.substring(0, pos) : source;
}
这不会分配任何临时对象来完成这项工作,并且比使用正则表达式更快。它还删除了所有空格,而不仅仅是 ' '。
【讨论】:
这是一个非常简短、高效且易于阅读的版本:
public static String trimTrailing(String str) {
if (str != null) {
for (int i = str.length() - 1; i >= 0; --i) {
if (str.charAt(i) != ' ') {
return str.substring(0, i + 1);
}
}
}
return str;
}
如果您想使用更广泛的空白定义,也可以使用 !Character.isWhitespace(str.charAt(i) 来替代 str.charAt(i) != ' '。
【讨论】:
Spring 框架提供了一个有用的 org.springframework.util.StringUtils。
【讨论】:
此代码旨在通过使用描述性名称(并避免使用正则表达式)尽可能容易地阅读。
它确实使用 Java 8 的 Optional,因此并不适合所有人。
public static String removeTrailingWhitspace(String string) {
while (hasWhitespaceLastCharacter(string)) {
string = removeLastCharacter(string);
}
return string;
}
private static boolean hasWhitespaceLastCharacter(String string) {
return getLastCharacter(string)
.map(Character::isWhitespace)
.orElse(false);
}
private static Optional<Character> getLastCharacter(String string) {
if (string.isEmpty()) {
return Optional.empty();
}
return Optional.of(string.charAt(string.length() - 1));
}
private static String removeLastCharacter(String string) {
if (string.isEmpty()) {
throw new IllegalArgumentException("String must not be empty");
}
return string.substring(0, string.length() - 1);
}
【讨论】:
String value="欢迎来到java";
所以我们可以使用
值 = value.trim();
【讨论】: