1

我有一个 jTable,我想在其中显示一个命令的结果,我使用 StringTokenizer 类的一个对象来分隔命令 cmd 的结果并将其显示在表 jTable1 中,我的问题是当我使用 system.out .println(st.nextToken()) 它可以正常工作,但是当我使用 data [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

出于所有实际目的, usingStringTokenizer被认为是deprecated。它只是为了向后兼容,现在实现相同结果的首选方法是使用类中的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

You may also be interested in using the Splitter class from the Google Guava library, e.g. Iterable< String > tokens = Splitter.on( ":" ).split(); for( String token : tokens ) { // do something } It is immutable and has a nice fluent API.

于 2012-03-18T15:01:18.713 回答