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

Java 不同转义字符的扫描困难,java,escaping,java.util.scanner,java-io,Java,Escaping,Java.util.scanner,Java Io,首先,让我先说,我知道我不是唯一一个经历过这个问题的人,我花了最后几个小时研究如何解决这个问题。遗憾的是,我的扫描仪无法工作。我是java新手,所以我不理解一些答案在不同问题中的复杂解释 下面是一个概要: 我试图读取一个包含卡片转义字符的文件。下面是一个简短的版本:(4张不同卡片中的数字2和3) 这是格式:(西装)(面)(价值)。例如: \u2663=西服 3=面 3=值 这是我用来阅读的代码: File file = new File("Cards.txt"); try { Sca

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

下面是一个概要: 我试图读取一个包含卡片转义字符的文件。下面是一个简短的版本:(4张不同卡片中的数字2和3)

这是格式:(西装)(面)(价值)。例如:

  • \u2663=西服
  • 3=面
  • 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
有谁能给我指点解决办法吗?我真的需要解决这个问题。我不想让你帮我写代码


提前感谢

只需使用UTF-8作为字符编码直接将套装字符存储到您的文件
Cards.txt
,而不是仅由java理解的相应unicode字符格式,这样当从您的文件中读取套装字符时,它将被读取为
字符串而不是对应的unicode字符

它的内容将是这样的:

♠2,2
...

另一种方法是使用unescape来取消unicode字符

然后,代码更改将是:

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

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

♥,一,

♥,二,

♥,三,

以下是代码片段:

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
。请查看答案以了解更多信息。

非常感谢,我从未想过只将字符本身放入文本文件中,然后用UTF-8编码保存它!现在可以了。非常感谢你花时间回答我的问题。我已经找到了尼古拉斯·菲洛托的工作答案。
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();