不同转义字符的扫描仪困难

Scanner difficulties with different escape characters

首先让我先说,我知道我不是唯一遇到过这个问题的人,我花了最后几个小时来研究如何解决它。遗憾的是,我无法让我的扫描仪工作。我是 java 的新手,所以我不明白一些答案在不同问题中的更复杂的解释。

这是一个概要: 我正在尝试读出一个包含卡片转义字符的文件。这是一个简短的版本:(4 个不同牌面的数字 2 和 3)

\u26602,2 
\u26652,2 
\u26662,2 
\u26632,2 
\u26603,3 
\u26653,3 
\u26663,3
\u26633,3

这是格式:(花色)(面),(值)。一个例子:

这是我用来阅读它的代码:

File file = new File("Cards.txt");
try {
    Scanner scanner = new Scanner(file);
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        String[] temp = line.split(",");
        cards.add(new Card(temp[0], Integer.parseInt(temp[1])));
    }
    scanner.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

ArrayList 卡片在此之后应该有 52 张卡片,其中包含一个名称(花色和面孔)和一个值。当我尝试打印名称时,这是输出:

\u26633

虽然应该是:

♣3

任何人都可以给我一些解决方案吗?我真的需要解决这个问题。我不想让你帮我写代码。

提前致谢

直接将花色字符存储到您的文件中 Cards.txt 使用 UTF-8 作为字符编码,而不是只有 java 才能理解的相应 unicode 字符格式,这样当它被读取时您的文件被读取为 String "\u2660" 而不是相应的 unicode 字符。

其内容将类似于:

♠2,2
...

另一种方法是使用 StringEscapeUtils.unescapeJava(String input) 对您的 unicode 字符进行转义。

代码更改为:

cards.add(new Card(StringEscapeUtils.unescapeJava(temp[0]), Integer.parseInt(temp[1])));

您必须使用 UTF-8 编码保存文件,然后使用相同的编码读取文件。

♥,1

♥,2

♥,3

这是代码片段:

BufferedReader buff = new BufferedReader(new InputStreamReader(
        new FileInputStream("Cards.txt"), "UTF-8"));

String input = null;
while (null != (input = buff.readLine())) {
    System.out.println(input);
    String[] temp = input.split(",");
    cards.add(new Card(temp[0], Integer.parseInt(temp[1])));
}

buff.close();

此外,您需要确保您的控制台已启用以支持 UTF-8。查看 this 答案以了解更多信息。