如何使用Java Scanner读取命题逻辑符号作为输入?

时间:2015-06-15 15:23:16

标签: java input java.util.scanner

 Scanner in = new Scanner(System.in,"UTF-8");
 System.out.println(in.next());

如果我粘贴,我会收到?作为输出到控制台。有人可以解释我能做些什么来正确读取这样的逻辑符号?我使用的是NetBeans 8.0.1。

感谢。

2 个答案:

答案 0 :(得分:7)

问题不在于输入角色,而在于将其打印到控制台。您的控制台似乎不支持\u2227的代码点,因此它会打印一个问号。

您应该测试控制台是否允许您通过打印您阅读的字符的数字表示来正确输入,如下所示:

Scanner in = new Scanner(System.in,"UTF-8");
String s = in.next();
if (s.length() != 0) {
    System.out.println((int)s.charAt(0));
}

如果打印8743,您可以在内部处理角色:比较

if (s.equals("∧")) {
    ...
}

将正常运作。

否则,您应该切换到使用第一个代码页中的字符,即^而不是

答案 1 :(得分:0)

我认为您的终端编码(IDE或命令行)可能不是UTF-8,所以当它转换时,您会看到差异。

我刚刚尝试了你的代码并得到了∧回来。

使用echo $ LC_CTYPE或echo $ LANG进行检查。

阅读此How to read a text file with mixed encodings in Scala or Java?http://docs.oracle.com/javase/7/docs/api/java/nio/charset/CharsetDecoder.html
用于处理不同的编码。