【问题标题】:Scanner difficulties with different escape characters不同转义字符的扫描仪困难
【发布时间】:2017-05-26 19:19:16
【问题描述】:

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

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

\u26602,2 
\u26652,2 
\u26662,2 
\u26632,2 
\u26603,3 
\u26653,3 
\u26663,3
\u26633,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

谁能给我指点解决方案?我真的需要解决这个问题。我不想让你为我写代码。

提前致谢

【问题讨论】:

    标签: java escaping java.util.scanner java-io


    【解决方案1】:

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

    ♥,1

    ♥,2

    ♥,3

    这里是sn-p的代码:

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

    【讨论】:

    • 非常感谢您花时间回答我的问题。我已经找到了 Nicolas Filotto 的答案。
    【解决方案2】:

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

    它的内容会是这样的:

    ♠2,2
    ...
    

    另一种方法是使用StringEscapeUtils.unescapeJava(String input) 取消转义您的Unicode 字符。

    代码更改为:

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

    【讨论】:

    • 非常感谢,我从没想过只是将字符本身放入文本文件并使用 UTF-8 编码保存!现在可以使用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多