分割字符串/标记
有没有更好的方法来读取java文件中的令牌? 我目前正在使用 StringTokenizer 来分割令牌。但在大多数情况下,它的效率可能非常低,因为您必须逐个令牌地读取令牌。
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有没有更好的方法来读取java文件中的令牌? 我目前正在使用 StringTokenizer 来分割令牌。但在大多数情况下,它的效率可能非常低,因为您必须逐个令牌地读取令牌。
谢谢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
我喜欢 Apache 的 Jakarta 类中的 StringUtils.split() 。它允许您编写如下代码:
让您避免使用正则表达式,并且它处理空指针。
I like the StringUtils.split() in Apache's Jakarta classes. It lets you write code like this:
Let's you avoid regex, and it deals with null pointers.
如果您查看
StringTokenizer
在 Java API 中,您会注意到它推荐了一种替代方案:如果这些选项都不满足您的需求,您应该看看
Scanner
,它也支持模式匹配:If you look at
StringTokenizer
in the Java API you will notice that it recommends an alternative:If neither of these options suit your needs, you should take a look at
Scanner
, which also supports pattern matching:我认为最好、最灵活的选择是 Guava 的 Splitter 类。有了它,您可以很好地控制如何拆分字符串,并且它会返回拆分结果的
Iterable
标记。您并没有真正指定您到底想要做什么,因为逐个令牌读取令牌是“低效的”,但是如果您更喜欢List
例如,您可以将Lists.newArrayList(Iterable) 或
ImmutableList.copyOf(Iterable)
将 >Iterable 转换为列表。I think the best and most flexible option for this is Guava's Splitter class. With it, you have a lot of control over how you split a string, and it returns an
Iterable<String>
of the tokens resulting from a split. You didn't really specify what exactly it is you want to do for which reading token by token is "inefficient", but if you'd prefer aList
for example, you could just convert theIterable
to a list usingLists.newArrayList(Iterable)
orImmutableList.copyOf(Iterable)
.您需要添加更多详细信息,但在简单情况下 split 效果很好。
You need to add more details, but is simple cases split works quite well.