HashSet中的额外逗号

时间:2013-04-24 13:34:23

标签: java

我正在尝试用大写字母分割字符串,例如当字符串是“SizeColorSize”时,aoutput数组是:{“Size”,“Color”,“Size”}。这通常有效。现在我想从数组中删除重复项,这就是我使用HashSet的原因,这样我就可以使用[“Color”,“Size”]排序集合。然后我在MySQL表中打印输出。

但问题是在输出中我有一个额外的逗号:[,“Color”,“Size”]。 知道为什么会这样吗?

这是代码的一部分:

for (int j = 0; j < configPair.size(); j++) {
    r = configPair.get(j).split("(?=\\p{Lu})");
    for (int i = 0; i < r.length; i++) {
        r = new HashSet<String>(Arrays.asList(r)).toArray(new String[0]);
        r[i].trim();
        Arrays.sort(r);
        Set<String> mySet = new HashSet<String>(Arrays.asList(r));
        sqlAttributeConfig = "INSERT INTO Config_Attributes (Config_Pairs) VALUES ('"
                    + mySet + "')";
        System.out.print(r[i]);             
    }
    System.out.println();
    r = null;
    con.stmt.executeUpdate(sqlAttributeConfig);
}

1 个答案:

答案 0 :(得分:4)

String的开头与String.split()中的正则表达式匹配时,会产生额外的空String

因此split将返回[[“”,“大小”,“颜色”,“大小”]而不是[“大小”,“颜色”,“大小],因此行为。

斯普利特的官方Javadoc表示如下:

  

此方法返回的数组包含输入的每个子字符串   由与此匹配的另一个子序列终止的序列   模式或由输入序列的结尾终止。

所以我猜领先的空String有资格作为“输入序列的子串,由另一个匹配此模式的子序列终止”,如文档中所述。