用于截断String的Java内联方法/策略?

时间:2014-02-12 18:18:42

标签: java string substring apache-commons

如果我有一个字符串:

String neatish = getTheString(); // returns "...neat..."

我知道我可以使用以下方法删除第一个省略号:

getTheString().substring(3);

但是我想知道是否有类似的单行方法,基于长度关闭 end ?像:

getTheString().substring(3).truncate(3);

我不想要特定于角色的方法,即。一个只适用于省略号的。

虽然有substring()接受两个参数,但它需要先将变更String保存到变量中以确定长度。 (或者,您可以拨打getTheString()两次。)

我当然可以写一个,但我想知道是否在标准java.lang包中或在Apache Commons-Lang中有一个单行方法

我有50%好奇,50%避免重新发明轮子。

更新:为避免混淆,我不想要:

String neatish = getTheString();
neatish = neatish.substring(3)...;

我正在寻找substring()的后端版本,并想知道为什么没有。{/ p>

4 个答案:

答案 0 :(得分:2)

有趣的运动

String theString = new StringBuilder(getTheString()).delete(0, 3).reverse().delete(0, 3).reverse().toString();

String放入StringBuilder,删除前3个字符,将其反转,删除最后3个字符(现在位于开头),然后再将其反转。

答案 1 :(得分:1)

您可以使用subStringBefore and subStringAfter from Commons

StringUtils.subStringAfter(StringUtils.subStringBefore(getTheString(), "..."), "...");

编辑基于长度

您需要:StringUtils.html#substring(java.lang.String, int, int)

StringUtils.substring(getTheString(), 3, -3);

答案 2 :(得分:0)

getTheString().substring(3).replaceFirst("(?s)...$", "");
getTheString().replaceFirst("(?s)^...(.*)...$", "$1");

这会删除最后3个字符的正则表达式,其中(?s)使.也匹配换行符。使用\\.匹配句点。难看。

答案 3 :(得分:0)

你可以写一个方法来做。

public static String trimChar(String s, char ch) {
    int start = 0;
    for(; start < s.length(); start++)
         if (s.charAt(start) != ch)
             break;
    int end = s.length();
    for(; end > start; end--)
         if (s.charAt(end-1) != ch)
             break;
    return s.substring(start, end);
}


String s = trimChar(getTheString(), '.');