4

我在 Java 中有一个逗号分隔值字符串:

String s = "a,b,c,d";

我需要对其进行标记(以逗号作为分隔符)并将其转换为Set<String>. 是StringTokenizer我最好的选择还是有更有效的方法?

4

6 回答 6

7

如果您尝试解决一般的 CSV 解析设置,请注意要处理引号和逗号转义。这就是存在像OpenCSV这样的库的原因。否则,您只需要按照 hvgotcodes 所述进行操作即可。

于 2012-07-13T17:06:48.207 回答
3

试试 String.split(),这可能是最简单的。

    String[] a = "a,b,c,d".split( "," );
    Set<String> s = new HashSet( Arrays.asList( a ) );
于 2012-07-13T17:01:01.827 回答
2

虽然StringTokenizer拆分输入字符串是一个不错的选择,但我个人更喜欢使用String.split().

String[] tokens = myString.split(",");
Set<String> set = new HashSet<String>(Arrays.asList(tokens));
于 2012-07-13T17:03:13.540 回答
1

我会用split. split给你一个数组,所以

String[] toks = s.split(",")

进而

Set<String> mySet = new HashSet<String>(Arrays.asList(toks));

于 2012-07-13T17:01:29.190 回答
0

Spring 框架提供的StringUtils.commaDelimitedListToSet正是您所追求的。仅仅为此而引入 Spring 可能有点过头了,但是如果您在一个已经包含它的框架中工作,那么这是一个需要注意的选项。

于 2012-07-13T17:12:44.440 回答
0

如果您只需要一个没有所有 CSV 规则的简单解决方案,我会推荐StringUtils.split(而不是String.split由于正则表达式开销):

HashSet<String> set = new HashSet<String>(Arrays.asList(StringUtils.split(text, ',')));

如果您需要遵守 CSV 规则的解决方案,您应该考虑使用Commons CSV

于 2012-07-13T17:21:11.443 回答