我正在尝试用大写字母分割字符串,例如当字符串是“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);
}
答案 0 :(得分:4)
当String
的开头与String.split()
中的正则表达式匹配时,会产生额外的空String
。
因此split
将返回[[“”,“大小”,“颜色”,“大小”]而不是[“大小”,“颜色”,“大小],因此行为。
斯普利特的官方Javadoc表示如下:
此方法返回的数组包含输入的每个子字符串 由与此匹配的另一个子序列终止的序列 模式或由输入序列的结尾终止。
所以我猜领先的空String
有资格作为“输入序列的子串,由另一个匹配此模式的子序列终止”,如文档中所述。