【发布时间】:2012-07-13 16:58:00
【问题描述】:
我在 Java 中有一个逗号分隔值字符串:
String s = "a,b,c,d";
我需要对其进行标记(以逗号作为分隔符)并将其转换为Set<String>。 StringTokenizer 是我最好的选择还是有更有效的方法?
【问题讨论】:
-
你会觉得这很有趣:stackoverflow.com/a/2972215/1001027
我在 Java 中有一个逗号分隔值字符串:
String s = "a,b,c,d";
我需要对其进行标记(以逗号作为分隔符)并将其转换为Set<String>。 StringTokenizer 是我最好的选择还是有更有效的方法?
【问题讨论】:
如果您尝试解决一般的 CSV 解析设置,请注意要处理引号和逗号转义。这就是为什么像OpenCSV 这样的库存在的原因。否则,您只需要按照 hvgotcodes 所述进行操作即可。
【讨论】:
试试 String.split(),这可能是最简单的。
String[] a = "a,b,c,d".split( "," );
Set<String> s = new HashSet( Arrays.asList( a ) );
【讨论】:
虽然StringTokenizer 是拆分输入字符串的好选择,但我个人更喜欢使用String.split()。
String[] tokens = myString.split(",");
Set<String> set = new HashSet<String>(Arrays.asList(tokens));
【讨论】:
我会使用split。 split 给你一个数组,所以
String[] toks = s.split(",")
然后
Set<String> mySet = new HashSet<String>(Arrays.asList(toks));
【讨论】:
Spring Framework 提供的 StringUtils.commaDelimitedListToSet 正是您所追求的。仅仅为此而引入 Spring 可能有点矫枉过正,但如果您在一个已经包含它的框架中工作,那么这是一个需要注意的选项。
【讨论】:
如果您只需要一个没有所有 CSV 规则的简单解决方案,我会推荐 StringUtils.split(而不是 String.split,因为正则表达式开销):
HashSet<String> set = new HashSet<String>(Arrays.asList(StringUtils.split(text, ',')));
如果您需要一个符合 CSV 规则的解决方案,您应该考虑在使用中Commons CSV
【讨论】: