在Java中,什么是LTRIM和RTRIM的良好替代方案?
Java中JavaScript在Java中,什么是LTRIM和RTRIM的良好替代方案?,java,string,trim,Java,String,Trim,Java中JavaScriptltrim()和rtrim()函数的好替代方法是什么?使用正则表达式,您可以编写: String s = ... String ltrim = s.replaceAll("^\\s+",""); String rtrim = s.replaceAll("\\s+$",""); 如果必须经常这样做,可以创建并编译一个模式以获得更好的性能: private final static Pattern LTRIM = Pattern.compile("^\\s+");
ltrim()
和rtrim()
函数的好替代方法是什么?使用正则表达式,您可以编写:
String s = ...
String ltrim = s.replaceAll("^\\s+","");
String rtrim = s.replaceAll("\\s+$","");
如果必须经常这样做,可以创建并编译一个模式以获得更好的性能:
private final static Pattern LTRIM = Pattern.compile("^\\s+");
public static String ltrim(String s) {
return LTRIM.matcher(s).replaceAll("");
}
从性能角度看,快速微基准测试(JIT编译后)表明,正则表达式方法的速度大约是循环的5倍(100万ltrim为0.49秒,而0.11秒)
我个人认为regex方法更具可读性,也不太容易出错,但如果性能是一个问题,你应该使用循环解决方案。使用regex可能很好,但它比简单的修剪函数慢得多:
public static String ltrim(String s) {
int i = 0;
while (i < s.length() && Character.isWhitespace(s.charAt(i))) {
i++;
}
return s.substring(i);
}
public static String rtrim(String s) {
int i = s.length()-1;
while (i >= 0 && Character.isWhitespace(s.charAt(i))) {
i--;
}
return s.substring(0,i+1);
}
根据@bezmax的回答,我看了一下Spring,但它不能证明我切换到Spring框架的过载是合理的。因此,我决定创建一个
Characters
类来轻松地左/右修剪任何给定字符(-class)的字符串。这门课在网上有空
如果要修剪空白,可以使用预定义的字符类:
Characters.WHITESPACE.trim( ... )
Characters.WHITESPACE.leftTrim( ... )
Characters.WHITESPACE.rightTrim( ... )
该类还具有其他类型的字符操作,例如压缩
、替换
或拆分
番石榴有trimLeadingFrom和trimTrailingFrom
import org.apache.commons.lang3.StringUtils;
private String rTrim(String str) {
return StringUtils.stripEnd(str, /*stripChars*/" ");
}
private String lTrim(String str) {
return StringUtils.stripStart(str, /*stripChars*/" ");
}
e、 g.
CharMatcher.whitespace.trimTrailingFrom(s)
可能有点便宜,但您也可以在不使用任何其他库的情况下使用这些库:
final var string=“Hello World”;
最终变量rtrimmed=(“+string).trim().substring(1);
//=>“你好,世界”
var ltrimmed=(字符串+”).trim();
ltrimmed=ltrimmed.substring(0,ltrimmed.length-1);
//=>“你好,世界”
我承认,
ltrimmed
没有那么漂亮,但它会起作用。您可以简单地尝试以下方法
String s = " Hello world "
String ltrim = s.stripLeading();
String rtrim = s.stripTrailing();
我本想让您看看Commons Lang StringUtils,但它们没有ltrim/rtrim(或lstrip/rstrip)+1那么…@Thilo,是的,他们有。请参阅我对答案的最后一次编辑。@Max:谢谢,对我最喜欢的库的信心恢复了。+1。不过我不会称之为“trim”,因为String#trim不会修剪空白,它会修剪控制字符和一些仅限ASCII的空白。Commons Lang将他们的版本(做你所做的和每个人可能想要的)称为“strip”。如果可以的话,另一个+1用于Spring中StringUtils的链接,它有“trimmLeadingWhitespace”。是的,@Thilo是对的。要使它像原来的java trim函数一样工作,只需将条件更改为
s.charAt(i),但不要这样做。原始的trim规范看起来很奇怪。这不应该是而(i>=0…
?否则,rtrim(“”
返回一个空格字符。replaceFirst
是更好的答案。这从Java 11开始就可用了。不再需要自定义代码或外部库。
import org.apache.commons.lang3.StringUtils;
private String rTrim(String str) {
return StringUtils.stripEnd(str, /*stripChars*/" ");
}
private String lTrim(String str) {
return StringUtils.stripStart(str, /*stripChars*/" ");
}
String s = " Hello world "
String ltrim = s.stripLeading();
String rtrim = s.stripTrailing();