2013-04-24 70 views
1

我试图用大写字母拆分字符串,例如当字符串是“SizeColorSize”时,aoutput数组是:{“Size”,“Color”,“Size”}。这工作正常。现在我想从数组中删除重复项,这就是为什么我使用HashSet,所以我会有[“Color”,“Size”]排序的集合。然后我在MySQL表中打印输出。HashSet中的额外逗号

但问题是,在输出中我有一个额外的逗号:[,“颜色”,“大小”]。 任何想法为什么这样?

这是代码的一部分:

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); 
} 
+5

你为什么要通过自己构建SQL来引发SQL注入攻击?改用准备好的语句。 – 2013-04-24 13:40:56

+0

也许在数组中有一个空字符串。当给定“SizeColorSize”作为输入时,“r”的大小是否等于3? – bdkosher 2013-04-24 13:41:53

回答

4

String的开始String.split()正则表达式模式匹配,它导致附加的空String

所以split将返回[ “”, “大小”, “颜色”, “大小”]而不是[ “大小”, “颜色”,“大小],这样的行为。

的拆分的官方的Javadoc说以下内容:

通过此方法返回的数组包含由另一个子序列,这 模式匹配或者由输入序列的末端封端的封端的输入 序列的每个子字符串。

所以我猜主要的空String合格为“输入序列的子串,由另一个匹配这个模式的子序列终止”,正如文档中所述。

+0

我刚刚通过mySet.remove(“”)解决了它。感谢您的回应。 – ArmMiner 2013-04-24 13:51:34

+0

那是分裂的行为,所以我想不出更好的解决方案。希望答案有所帮助:) – 2013-04-24 13:53:40