2010-08-18 149 views
0

有更好的方法来读取java中的文件中的令牌吗? 我目前使用StringTokenizer来分割令牌。但是在大多数情况下,由于您必须通过令牌读取令牌,因此效率可能非常低下。分割字符串/令牌

谢谢

+1

*“在大多数情况下效率非常低,因为您必须通过令牌读取令牌”*,那么您还希望如何执行此操作?我的意思是,除了扫描整个输入字符串/流之外,您还将如何“发现”您的令牌? – 2010-08-18 19:50:14

回答

3

如果你在Java API中看看StringTokenizer,你会发现,它建议替代:

StringTokenizer是一个遗留类 保持兼容性的原因 虽然它的使用是在新 代码气馁。建议寻求该功能的任何人 使用split方法Stringjava.util.regex包代替。

如果没有这些选项满足您的需求,您应该看一看Scanner,同时也支持模式匹配:

Scanner scanner= new Scanner(new File("example.txt")); 
    while (scanner.hasNextLine()) { 
     // do some stuff 
    } 
2

我觉得这个最好的和最灵活的选择就是GuavaSplitter类。有了它,你可以很好地控制你如何分割一个字符串,并且它返回一个由分割产生的令牌的Iterable<String>。您没有真正指定您想要执行的操作,以令牌为单位的读取令牌“效率低”,但如果您希望使用List例如,则可以使用Lists.newArrayList(Iterable)或或ImmutableList.copyOf(Iterable)Iterable转换为列表。

+0

这看起来不错,我喜欢它+1 – ninesided 2010-08-18 20:17:01

1

您需要添加更多的细节,但简单的情况split工作得很好。

4

我喜欢在Apache的Jakarta类StringUtils.split()。它可以让你编写这样的代码:

String[] splitStrings = StringUtils.split(unsplitString, "|"); 

让我们避开正则表达式,它处理空指针。