如何只删除Java中的string尾部空格,并保持领先的空格?
trim()
函数删除拖尾和前导空格,但是,如果我只想删除string的尾部空格,我该怎么做?
谢谢!
使用正则expression式\s++$
,可以用空格( ""
)replace所有尾部空格字符(包括空格和制表符)。
final String text = " foo "; System.out.println(text.replaceFirst("\\s++$", ""));
产量
foo
在线演示。
这里是正则expression式的细分:
-
\s
– 任何空格字符, -
++
– 匹配以前的一个或多个令牌(占有); 即匹配一个或多个空格字符。+
模式以占有forms++
,当模式不匹配时花费较less的时间来检测情况。 -
$
– string的结尾。
因此,正则expression式将匹配尽可能多的空白,直接跟在string末尾:换句话说,尾随的空白。
如果您以后需要扩展您的需求,那么投入学习正则expression式将会变得更有价值。
参考
- Java正则expression式语法
另一种select是使用Apache Commons的StringUtils
,特别是StringUtils.stripEnd
String stripped = StringUtils.stripEnd(" my lousy string "," ");
我修改了原始的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); }
testing:
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
最实际的答案是@ 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; }
这不会分配任何临时对象来执行该任务,并且比使用正则expression式更快。 它也删除所有的空格,而不是“”。
这是一个非常简短,高效且易于阅读的版本:
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; }
作为str.charAt(i) != ' '
一个替代方法,你也可以使用!Character.isWhitespace(str.charAt(i)
如果你想使用更广泛的空白定义。
string值=“欢迎使用java”;
所以我们可以使用
value = value.trim();
Spring框架提供了一个有用的org.springframework.util.StringUtils。
trimTrailingWhitespace
此代码旨在通过使用描述性名称(并避免正则expression式)尽可能轻松地进行读取。
它使用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); }