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
相关产品推荐
相关产品推荐

