如何在groovy中截断字符串?
我用过:
def c = truncate("abscd adfa dasfds ghisgirs fsdfgf", 10)
但是收到错误。
答案 0 :(得分:67)
Groovy社区添加了take()
方法,可用于简单和安全字符串截断。
示例:
"abscd adfa dasfds ghisgirs fsdfgf".take(10) //"abscd adfa"
"It's groovy, man".take(4) //"It's"
"It's groovy, man".take(10000) //"It's groovy, man" (no exception thrown)
还有一个相应的drop()
方法:
"It's groovy, man".drop(15) //"n"
"It's groovy, man".drop(5).take(6) //"groovy"
take()
和drop()
都与字符串的开始相关,如“从前面拍摄”和 “从前面掉下来”。
运行示例的在线Groovy控制台:
https://ideone.com/zQD9Om - (注意:用户界面非常糟糕)
有关其他信息,请参阅“向集合,迭代器,数组添加获取方法”:
https://issues.apache.org/jira/browse/GROOVY-4865
答案 1 :(得分:8)
在Groovy中,字符串可以被视为字符范围。因此,您可以简单地使用Groovy的范围索引功能并执行myString[startIndex..endIndex]
。
举个例子,
"012345678901234567890123456789"[0..10]
输出
"0123456789"
答案 2 :(得分:1)
我们可以简单地使用Groovy的范围索引功能并执行someString[startIndex..endIndex].
例如:
def str = "abcdefgh"
def outputTrunc = str[2..5]
print outputTrunc
控制台:
"cde"
答案 3 :(得分:1)
为避免分词,您可以使用 java.text.BreakIterator 。这将在一些字符后将字符串截断为最接近的字边界。
示例强>
package com.example
import java.text.BreakIterator
class exampleClass {
private truncate( String content, int contentLength ) {
def result
//Is content > than the contentLength?
if(content.size() > contentLength) {
BreakIterator bi = BreakIterator.getWordInstance()
bi.setText(content);
def first_after = bi.following(contentLength)
//Truncate
result = content.substring(0, first_after) + "..."
} else {
result = content
}
return result
}
}
答案 4 :(得分:0)
这是我帮助函数来解决这个问题。在许多情况下,您可能希望截断by-word而不是by-characters,所以我也粘贴了该函数。
public static String truncate(String self, int limit) {
if (limit >= self.length())
return self;
return self.substring(0, limit);
}
public static String truncate(String self, int hardLimit, String nonWordPattern) {
if (hardLimit >= self.length())
return self;
int softLimit = 0;
Matcher matcher = compile(nonWordPattern, CASE_INSENSITIVE | UNICODE_CHARACTER_CLASS).matcher(self);
while (matcher.find()) {
if (matcher.start() > hardLimit)
break;
softLimit = matcher.start();
}
return truncate(self, softLimit);
}