不同转义字符的扫描仪困难
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
这是格式:(花色)(面),(值)。一个例子:
- \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
任何人都可以给我一些解决方案吗?我真的需要解决这个问题。我不想让你帮我写代码。
提前致谢
直接将花色字符存储到您的文件中 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 答案以了解更多信息。
首先让我先说,我知道我不是唯一遇到过这个问题的人,我花了最后几个小时来研究如何解决它。遗憾的是,我无法让我的扫描仪工作。我是 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
任何人都可以给我一些解决方案吗?我真的需要解决这个问题。我不想让你帮我写代码。
提前致谢
直接将花色字符存储到您的文件中 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 答案以了解更多信息。