在文本文件中的二维字符数组在java中有空格

问题描述 投票:1回答:1

我有一个文本文件,其中包含奖牌的团队成绩,每一行代表一个团队在五场比赛中的总奖牌,每个角色是单个游戏中的奖牌:

GSGBS
SSBGG
G SB

我使用扫描仪将文件转换为字符串:

String fileName = keyboard.nextLine();
Scanner teamMedals = new Scanner (new File (fileName));

然后我使用while循环打印每个团队的奖牌:

    int teamNumber = 0;
    while (teamMedals.hasNext()) {
         String x = teamMedals.nextLine();
         teamNumber += 1;
         System.out.println("Team #" + teamNumber + "medals: " + x);
    }

我创建了这个空的二维数组,由分数填充:

int numberOfGames = 5
char [] [] teamScoresArray = new char [teamNumber][numberOfGames.length];

我需要用每个团队的一个char填充每个子数组元素。所以结果看起来像这样:

[['G','S','G','B','S'],['S','S','B','G','G'],['G',' ','S','B',' ']]

问题是,因为有空格和新行我不断收到此错误:

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0

java arrays loops
1个回答
2
投票

不要使用Scanner来简单地读取文本文件。使用BufferedReader可获得更好的性能。

char[][] array;
try (BufferedReader in = new BufferedReader(new FileReader(fileName))) {
    List<char[]> list = new ArrayList<>();
    for (String line; (line = in.readLine()) != null; )
        list.add(line.toCharArray());
    array = list.toArray(new char[list.size()][]);
}

更好的是,使用Files.lines(Path path)流处理(Java 8+):

char[][] array = Files.lines(Paths.get(fileName))
                      .map(String::toCharArray)
                      .toArray(char[][]::new);

产量

System.out.println(Arrays.deepToString(array));
[[G, S, G, B, S], [S, S, B, G, G], [G,  , S, B,  ]]
© www.soinside.com 2019 - 2024. All rights reserved.