HashSet中的额外逗号

我试图用大写字母分割字符串,例如当字符串是“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(Arrays.asList(r)).toArray(new String[0]); r[i].trim(); Arrays.sort(r); Set mySet = new HashSet(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); } 

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

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

斯普利特的官方Javadoc说:

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

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