You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用StringTokenizer将txt文件内容转为二维数组的报错问题求助

问题根因

错误出在二维数组赋值的循环逻辑:内层遍历列的循环中,每次j迭代都会重新给同一行文本创建新的StringTokenizer实例,导致每次调用nextToken()都只会返回当前行第一个被逗号分割的元素,最终一行所有列的元素都被赋值为行首第一个值,才会出现重复输出的情况。

修复方案

只需要把StringTokenizer的创建逻辑移到内层列循环外面,每一行仅创建一次实例即可,修复后完整代码如下:

import java.util.*;

public class Tokens {
   public static TextFileInput myFile;
   public static StringTokenizer myTokens;
   public static int[][] twodimarr;
   public static String line;
   
 
   public static void main(String[] args) {

      myFile = new TextFileInput("twodimension8.txt");
      line = myFile.readLine();
      System.out.println("The input line is "+line);

      myTokens = new StringTokenizer(line,",");

      int row = Integer.parseInt(myTokens.nextToken());
      int col = Integer.parseInt(myTokens.nextToken());

      twodimarr = new int[row][col];

      for (int i = 0; i < row; i++) {
          line = myFile.readLine();
          // 每一行仅创建一次StringTokenizer,移到内层循环外
          myTokens = new StringTokenizer(line, ",");
          for (int j = 0; j < col; j++) {
             twodimarr[i][j] = Integer.parseInt(myTokens.nextToken());
          }
      }

      for (int i=0; i<row; i++) {
          for (int j=0; j<col;j++) {
              // 加空格分隔输出,避免数字拼接看不清
              System.out.print(twodimarr[i][j] + " ");
          }
          System.out.println();
    }
         
   }
}

修改后运行输出会和txt文件内的矩阵内容完全一致。

内容的提问来源于stack exchange,提问作者Andrew Hu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:09:04