首先让我先说我知道我不是唯一经历过这个问题的人,我花了最后几个小时来研究如何解决这个问题。可悲的是,我无法让我的扫描仪工作。我是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
任何人都可以指点解决方案吗?我真的需要解决这个问题。我不希望你为我编写代码。
提前致谢
答案 0 :(得分: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])));
答案 1 :(得分:0)
您必须使用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答案以了解更多信息。