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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在文本文件中的二维字符数组在java中有空格相关的知识,希望对你有一定的参考价值。

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

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

答案

不要使用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,  ]]

以上是关于在文本文件中的二维字符数组在java中有空格的主要内容,如果未能解决你的问题,请参考以下文章

JAVA程序命令行中有空格问题

如何在 MATLAB 中连接元胞数组中的字符串,它们之间有空格?

Java:文本文件到二维数组

C语言中输入字符串,里面有空格,怎么根据空格把字符串分开,并存在数组里?

java 解析xml时标签之间有空格

如何用批处理命令删除一批文件中的空格字符.