1

文字列を大文字で分割しようとしています。たとえば、文字列が "SizeColorSize" の場合、aoutput 配列は {"Size", "Color", "Size"} です。これは正常に動作します。今、配列から重複を削除したいので、["Color", "Size"] ソートされたコレクションを持つように HashSet を使用しています。次に、出力を MySQL テーブルに出力しています。

しかし問題は、出力に [, "Color", "Size"] という余分なコンマが 1 つあることです。なぜそれがそのようなものなのですか?

これはコードの一部です:

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

の先頭がStringの正規表現パターンと一致するString.split()と、追加の空のString.

したがって、splitは ["", "Size", "Color", "Size"] の代わりに ["", "Size", "Color", "Size"] を返すため、この動作になります。

Split の公式 Javadoc は次のように述べています。

このメソッドによって返される配列には、このパターンに一致する別のサブシーケンスで終了するか、入力シーケンスの最後で終了する入力シーケンスの各部分文字列が含まれます。

Stringしたがって、ドキュメントで述べられているように、先頭の空は「このパターンに一致する別のサブシーケンスで終了する入力シーケンスの部分文字列」として修飾されると思います。

于 2013-04-24T13:40:02.030 に答える