【发布时间】:2013-04-01 01:47:16
【问题描述】:
我正在寻找一种有效的方法来获取从多个字符串中提取的字符串标记列表(例如,使用空格分隔符)。
例子:
String s1 = "My mom cook everyday";
String s2 = "I eat everyday";
String s3 = "Am I fat?";
LinkedList<String> tokens = new LinkedList<String>();
//any code to efficiently get the tokens
//final result is tokens make of a list of the following tokens:
//"My", "mom", "cook", "everyday", "I", "eat", "everyday", "Am", "I", "fat?".
现在
- 我不确定
LinkedList是最有效的收集类(Apache Commons、Guava,它们能帮上忙吗?)! - 我打算使用来自 Apache Commons 的
StringUtils,但split方法返回一个数组!因此,我应该使用 for 循环从 split 返回的字符串对象数组中提取字符串。效率高吗:我不知道,split创建了一个数组! - 我从 Guava 读到了
Splitter,但 this post 指出StringUtils在实践中更好。 - 来自
Java.util的Scanner怎么样。它似乎没有分配任何额外的数据结构。不是吗?
请绘制最有效的 Java 解决方案,即使使用其他广泛使用的库,例如 Guava 和 Apache Commons。
【问题讨论】:
-
关于#3 - 你引用的帖子恰恰相反:总之,我想我大部分时间仍然会使用Splitter。在小型列表中,性能差异可以忽略不计,Splitter 使用起来感觉更好。我仍然对结果感到惊讶,如果您要拆分很多字符串并且性能是一个问题,那么可能值得考虑切换回 Commons StringUtils。 另外,Splitter 很多,很多 比 String#split 或 Apache Commons 解决方案更强大。
-
为什么对优化如此感兴趣?
-
@PaulVargas 因为我有数千个字符串要从大文本中进行标记。
-
@Xaerxess 我读了这篇文章:它并没有相反的说法。他的结论是“如果您要拆分大量字符串并且性能是一个问题,那么可能值得考虑切换回 Commons StringUtils”。我的目标是……
-
您的意思是阅读大文本文件吗?
标签: java string guava tokenize apache-commons