我需要修剪java中的String,以便:
快速的棕色狐狸越过laz狗 .
变
快速的棕色......
在上面的例子中,我修剪为12个字符 . 如果我只使用子字符串,我会得到:
快速...
我已经有了使用子字符串执行此操作的方法,但我想知道什么是最快(最有效)的方法,因为页面可能有许多修剪操作 .
我能想到的唯一方法是将字符串分割成空格并将其重新组合,直到其长度超过给定长度 . 还有其他方法吗?也许是一种更有效的方法,我可以使用相同的方法来执行“软”修剪,其中我保留最后一个单词(如上例所示)和硬修剪,这几乎是一个子字符串 .
谢谢,
7 回答
下面是我用来修剪webapps中的长字符串的方法 . 你设置"soft"
boolean
,如果设置为true
将保留最后一个字 . 这是我做到的最简洁的方法,我可以使用StringBuffer,它比重新创建一个不可变的字符串更有效 .Update
我已经更改了代码,以便在StringBuffer中追加
...
,这是为了防止String
隐含的不必要的创建,这是缓慢而浪费的 .Note:
escapeHtml
是来自apache commons的静态导入:import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;
您可以删除它,代码应该工作相同 .
这是一个简单的,基于正则表达式的1行解决方案:
说明:
(?<=.{12})
是一个负面的背后,它断言匹配的左边至少有12个字符,但它是一个非捕获(即零宽度)匹配\b.*
匹配第一个单词边界(在至少12个字符之后 - 上面)到结尾用“......”代替
这是一个测试:
输出:
请尝试以下代码:
尝试通过添加“...”来搜索位置小于或大于11的空间的最后一次出现并修剪其中的字符串 .
您的要求不明确 . 如果您无法用自然语言表达它们,那么将它们翻译成像Java这样的计算机语言就不足为奇了 .
“保留最后一个字”意味着算法将知道“单词”是什么,所以你必须首先告诉它 . 分裂是一种方法 . 具有语法的扫描仪/解析器是另一种 .
在关注效率之前,我担心让它发挥作用 . 让它工作,测量它,然后看看你可以做些什么关于性能 . 其他一切都是没有数据的猜测 .
怎么样:
我使用这个hack:假设修剪过的字符串必须有120个长度: