1

私はjTableを持っていて、コマンドの結果を表示したいのですが、StringTokenizerクラスのオブジェクトを使用して、コマンドcmdの結果を分離し、テーブルjTable1に表示しました。私の問題は、system.outを使用するときです.println(st.nextToken()) 正しく動作しますが、データ [0][i] を使用してテーブルに結果を表示すると、テーブルのすべての行でコマンドの最後の結果をコンパイルすると表示されます。コード:

 public Object[][] data;
        public String  title[] = {"t1","t2","t3","t4","t5"};
       private void init_tab() {

            data = new Object[5][5];
                 for(int i=0;i<5;i++){
           try{ 
            String      cmd = "the command "                        
            ..... //command cmd traitment
          }
I
            String response = build.toString();  
             StringTokenizer st = new StringTokenizer(response,":"); 
               while (st.hasMoreTokens()) { 

                   //System.out.println(st.nextToken()) ; 


                   data[i][0]= st.nextToken();


           }
            }catch(Exception e){
        e.printStackTrace();}  

           jTable1= new JTable(data, title);
            jScrollPane1.setViewportView(jTable1);
                     }

             }

data[i][0] の問題はわかっていますが、どうすればこの問題を解決できますか。

4

3 に答える 3

2

コマンドの最後の結果を表示している理由は、そのようにコーディングしたためです。プログラムの次の部分を見てください

      String response = build.toString();  
         StringTokenizer st = new StringTokenizer(response,":"); 
           while (st.hasMoreTokens()) { 
               //System.out.println(st.nextToken()) ; 
               data[i][0]= st.nextToken();
       }

「:」で区切られたすべての文字列トークンを反復処理し、同じ場所 data[i][0] に追加しています。data(rows) 配列の同じインデックスに追加すると、すべてのトークンが繰り返され、そのたびに以前に追加されたトークンが置き換えられます。これは、StringTokenizer がより多くのトークンを取得し、最後のトークンを追加した後に上記のループから抜け出すまで発生します。5 つの異なる列に 5 つのトークンを表示する場合は、次のように修正してください。

         String response = build.toString();  
         StringTokenizer st = new StringTokenizer(response,":"); 
         int j = 0;
          while (st.hasMoreTokens()) { 
               //System.out.println(st.nextToken()) ; 
               data[i][j]= st.nextToken();
               j++;
           }
于 2012-03-18T13:45:40.463 に答える
1

すべての実用的な目的のために、使用は非推奨StringTokenizerと見なされます。これは後方互換性のためだけに存在し、最近では同じ結果を得るために推奨される方法は、次のようにクラスでメソッドを使用することです。split()String

String response = build.toString();  
String[] st = response.split(":");
for (int j = 0; j < st.length; j++) {
    data[i][j] = st[j];
}
于 2012-03-18T13:56:37.147 に答える
0

Google Guava ライブラリの Splitter クラスの使用にも興味があるかもしれません。for( String token : tokens ) { // 何かを行う } 不変で、流暢な API を備えています。

于 2012-03-18T15:01:18.713 に答える