0

2つの列の値を連結し、次のように文字列を返すクエリがあります。

423545(50),AXX-10, ABB-1234X(30), 7568787(50),53654656,2021947(50),ABCD-2343423,FDKHD-324342(20),

その文字列を分割して配列に入れ、括弧内のすべての値を破棄したいと思います。出力は次のようになります。

[423545,AXX-10, ABB-1234X, 7568787,53654656,2021947,ABCD-2343423,FDKHD-324342]
  • 文字列の最後のコンマはオプションです
  • すべての列に括弧で囲まれた値が含まれているわけではありません

String.split()を使用できることは知っていますが、文字列の最後にあるオプションの括弧で囲まれた値とコンマはそれを複雑にします。

前もって感謝します。

4

3 に答える 3

1

2つのパターンに分割できます:-

  • \\(\\d+\\),[ ]*括弧で囲まれた用語を処理する1つ
  • 第二に,[ ]*、これは通常の,分離された値に対して機能します。

を使用してこれらの正規表現をマージしpipe(|)、一度に分割を実行する必要があります。

したがって、分割基準は次のようになります。

str.split("(?:\\(\\d+\\),[ ]*)|(?:,[ ]*)");

これはさらに次のように簡略化できます。

str.split("(?:\\(\\d+\\))?,[ ]*");

パーツをオプションにし、共通のパーツを外に出しました。

于 2013-02-07T21:40:35.883 に答える
1

何かのようなもの

([a-zA-Z\-\d]+)[()\d]*,*

? 私はここでそれをテストしましたが、うまくいくようです.0番目が完全に一致する場合、グループ番号1の結果文字列に挿入するトークンを取得します.

于 2013-02-07T21:52:42.130 に答える
1

括弧内の値を除外して分割できます。

    String str = "423545(50),AXX-10, ABB-1234X(30), 7568787(50),53654656,2021947(50),ABCD-2343423,FDKHD-324342(20)";

    String str2 = str.replaceAll("\\(\\d+\\)", "");
    for (String string : str2.split(",")) {
        System.out.println(string);
    }
于 2013-02-07T22:03:34.650 に答える