0

データベースの結果セット行から生成された次の文字列を分割したいと思います。

サンプル行:

A) (74,"and there","is a car","in the","garage man",t)

B) (17,アカウント3,,,,t)

次のような出力が必要です (パイプ | 分割要素を分離する):

A) 74 | そしてそこに | 車です | |で ガレージマン | t

B) 17 | アカウント3 | | | | | | | t

アプリケーションで null として格納される長さの値をゼロにしたい。これは私のソースコードです:

public void refreshSearchTable (ArrayList<String> newData){
        int noOfRows = newData.size();
        int noOfColumns = gui.getTableSearchResultHeader().length + 1;
        Object[][] tempList = new Object[noOfRows][noOfColumns];
        String rowResult = "";
        String delims = "[,()\"]+";
        String [] tokens;
        Object [] elements = newData.toArray();

        int j = 0;
        for (int i = 0; i < noOfRows; i++){
            rowResult = elements[i].toString();
            System.out.println("rowresult: " + rowResult);
            tokens = rowResult.split(delims, -1);
            for (String t : tokens){

                System.out.println("j: " + j + "t: " + t);

                if (j == 1){ ... }
                else if (j==2){ ... }
                                ...

                j++;
            }
            j=0;
        }
    }

"[,()\"]+" は、ゼロ以外の長さの値に対して正常に機能します。インデックス値 j に従って、正しい部分文字列を取得できます。負の値を split(, ) は、ゼロ以外の長さの値を破棄しません ... しかし、そうします。

4

4 に答える 4

3

多分あなたは試すことができ.split("[()\"]*,{1}[()\"]*")ます;

以前の式のユーザー[,()\"]+は、セパレータとして複数のコンマまたは通知されたその他のセパレータを使用します。たとえば、,,は 1 つと見なされます[],[]。上記の式では、0 個以上のセパレータの後にコンマが 1 つだけ続くことを想定しており、この後に 0 個以上のセパレータを続けることもできます。

于 2012-06-19T10:11:32.767 に答える
0

String.replaceまたはreplaceallを使用しなかった理由は、現在のプログラムとして機能しますが、文字列の空の部分をスキップする必要がある場合は、最初に行う必要があります

  • 文字列ビルダーを作成する
  • 入力配列リストからすべてのデータを追加します(データ長== 0またはデータがnullの場合は、スキップするだけの条件で)
  • 最後にシンボルを追加します|
于 2012-06-19T10:06:51.503 に答える
0

intパラメーターはsplit()、結果配列の最大長を意味します。なので、使い方は自分で決めたほうがいいと思いますString#isempty()

詳細を見る:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String , int)

于 2012-06-19T10:09:03.333 に答える
0

ありがとう、スペイト。これは、私が必要とする方法で機能しています。元の質問にパイプを追加して申し訳ありません。要素を分離するためにそれらを入力しただけです。結果セットの列を維持するために、コンマで定義された特定のインデックスに従って要素が必要でした。

public void refreshSearchTable (ArrayList<String> newData){
        int noOfRows = newData.size();
        int noOfColumns = gui.getTableSearchResultHeader().length + 2;
        Object[][] tempList = new Object[noOfRows][noOfColumns];
        String rowResult = "";
        String delims = "[()\"]*,{1}[()\"]*";
        String [] tokens;
        Object [] elements = newData.toArray();

        int j = 0;
        for (int i = 0; i < noOfRows; i++){
            rowResult = elements[i].toString();
            if (rowResult.startsWith("(")){
                rowResult = rowResult.substring(1);
            }
            if (rowResult.endsWith(")")){
                rowResult = rowResult.substring(0, rowResult.length()-1);
            }
            System.out.println("rowresult: " + rowResult);
            tokens = rowResult.split(delims);
            for (String t : tokens){

                System.out.println("j: " + j + "t: " + t);

                j++;
            }
            j=0;
        }

出力:

rowresult: 74,"and there","is a car","in the","garage man",t
j: 0t: 74
j: 1t: and there
j: 2t: is a car
j: 3t: in the
j: 4t: garage man
j: 5t: t
于 2012-06-19T12:17:21.767 に答える