2013-04-24 79 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