java strim性能_字符串-Java中LTRIM和RTRIM的好替代方法是什么?

字符串-Java中LTRIM和RTRIM的好替代方法是什么?

Java中的JavaScript ltrim()和rtrim()函数的很好替代品是什么?

yegor256 asked 2020-07-03T14:36:21Z

6个解决方案

49 votes

使用正则表达式,您可以编写:

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.49s对0.11s)。

我个人发现正则表达式方法更具可读性,并且不易出错,但是如果性能是一个问题,则应使用循环解决方案。

assylias answered 2020-07-03T14:36:49Z

29 votes

使用正则表达式可能很好,但是比简单的修整功能要慢很多:

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);

}

资料来源:[http://www.fromdev.com/2009/07/playing-with-java-string-trim-basics.html]

另外,有些库提供了此类功能。 例如,Spring StringUtils。Apache Commons StringUtils也提供类似的功能:strip,stripStart,stripEnd

StringUtils.stripEnd("abc ", null) = "abc"

bezmax answered 2020-07-03T14:37:18Z

6 votes

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*/" ");

}

Yanniel answered 2020-07-03T14:37:34Z

2 votes

番石榴有CharMatcher trimLeadingFrom和trimTrailingFrom

例如 CharMatcher.whitespace.trimTrailingFrom(s)

Andrew McKinlay answered 2020-07-03T14:37:58Z

1 votes

基于@bezmax的答案,我看了一下Spring condense,但是它不能证明切换到Spring框架给我带来的负担。 因此,我决定创建一个condense类,以便为任何给定字符(类)轻松地左右修剪字符串。 该类在GitHub上可用。

Characters.valueOf('x').trim( ... )

Characters.valueOf('x').leftTrim( ... )

Characters.valueOf('x').rightTrim( ... )

如果要修剪空格,可以使用预定义的字符类:

Characters.WHITESPACE.trim( ... )

Characters.WHITESPACE.leftTrim( ... )

Characters.WHITESPACE.rightTrim( ... )

该类还具有其他类型的字符操作,例如2950263322073105105408、replace或split。

Kristian Kraljic answered 2020-07-03T14:38:31Z

0 votes

可能会便宜一些,但您也可以在没有任何其他库的情况下使用它们:

final var string = " Hello World ";

final var rtrimmed = ("." + string).trim().substring(1);

// => " Hello World"

var ltrimmed = (string + ".").trim();

ltrimmed = ltrimmed.substring(0, ltrimmed.length - 1);

// => "Hello World "

我承认ltrimmed并不是那么漂亮,但是可以解决问题。

Tharabas answered 2020-07-03T14:38:58Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值