TrimEnd for Java?

TrimEnd for Java?,java,string,Java,String,在将C#应用程序转换为Java的过程中,我遇到了String的TrimEnd方法。是否有等效的Java实现?我好像找不到 我不想将其替换为trim,因为我不想在此时更改程序的含义或操作,除非我必须这样做。以下是一个技巧: 没有直接的替代品。您可以使用regexps,也可以使用Commons Lang方法。自Java 11以来,您可以使用去除尾随空格,或者。如果您需要去除指定字符的更通用的版本,请参见下文,Java11中没有直接替换 对于Java 11之前的版本,此处保留旧答案: 没有直接等效项

在将C#应用程序转换为Java的过程中,我遇到了String的
TrimEnd
方法。是否有等效的Java实现?我好像找不到


我不想将其替换为
trim
,因为我不想在此时更改程序的含义或操作,除非我必须这样做。

以下是一个技巧:


没有直接的替代品。您可以使用regexps,也可以使用Commons Lang方法。

自Java 11以来,您可以使用去除尾随空格,或者。如果您需要去除指定字符的更通用的版本,请参见下文,Java11中没有直接替换

对于Java 11之前的版本,此处保留旧答案:

没有直接等效项,但是如果要去除尾随空格,可以使用:

"string".replaceAll("\\s+$", "");
\s
是正则表达式字符集“whitespace”,如果您只关心去除尾随空格,可以将其替换为空格字符。如果要使用更通用的形式,即删除任意尾随字符集,则需要稍微修改它以使用:

"string".replaceAll("[" + characters + "]+$", "");
请注意,第一个参数是一个通用正则表达式,因此,如果
字符之一是
]
,则该字符必须是列表中的第一个字符。有关java正则表达式模式的完整描述,请参阅

如果您曾经需要从.net实现该方法,它几乎是相同的,但看起来是这样的:

"string".replaceAll("^[" + characters + "]+", "");

没有本地的等价物。使用以下命令:

public static String trimEnd( String s,  String suffix) {

 if (s.endsWith(suffix)) {

   return s.substring(0, s.length() - suffix.length());

 }
 return s;
}
如果您重视性能(可能您的方法在数千个字符串的循环中使用),则可以使用此方法:

public String trimEnd(String value) {
    int len = value.length();
    int st = 0;
    while ((st < len) && value.charAt(len - 1) == ' ') {
      len--;
    }
    return value.substring(0, len);
}
public String trimEnd(字符串值){
int len=value.length();
int st=0;
而((st
如果性能不重要,可以使用一个衬里:

("X" + str).trim().substring(1)

我喜欢谷歌版的番石榴

import static com.google.common.base.CharMatcher.WHITESPACE;

WHITESPACE.trimTrailingFrom(value);

如果您使用的是maven,那么只需将其添加到pom.xml的dependencies部分即可

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>

番石榴
番石榴
23

好消息
它是在Java 11中添加的。

  • strip()
  • stripLeading()
  • stripTrailing()

注意,这会修剪尾随空格@Paul Wagland的变体修剪尾随空格字符。C#方法使用一个“trimChars”+1数组来表示StringUtils。除了trimXXX之外,他们还提供stripXXX,它可以正确处理Unicode空白(仅trim/还修剪ASCII控制代码)。@finnw:你说得对……正则表达式需要锚定。谢谢你帮我抓住了这个问题,我已经更新了答案,把正确的正则表达式放进去了。很抱歉,我花了这么长时间才回到这个问题上。谢谢你的回答!我只需要做一个小小的更正。”“\s+$”需要一个额外的“`”来正确转义它。您应该签入一个循环。后缀可能在末尾出现两次或两次以上。如果您还有制表符和其他空格,请替换
…=''使用。这是否正在从字符串末尾删除字符?仍然有限;在C#中,您可以给它一个要修剪的字符列表作为参数。
CharMatcher.anyOf(suffix).trimTrailingFrom(value);
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>