1

我正在尝试按大写字母拆分字符串,例如当字符串为“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);
}
4

1 回答 1

4

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

所以split会返回 ["", "Size", "Color", "Size"] 而不是 ["Size", "Color", "Size],因此行为。

Split 的官方 Javadoc 是这样说的:

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

所以我猜前导空String符合“输入序列的子字符串,由与此模式匹配的另一个子序列终止”,如文档中所述。

于 2013-04-24T13:40:02.030 回答