无法通过控制台输入下标(System.in 前丢失)

Can not enter subscript via console (lost before System.in)

提问人:Zabuzard 提问时间:1/13/2023 最后编辑:Zabuzard 更新时间:1/13/2023 访问量:41

问:

问题

简而言之,如果您尝试以下代码片段:

Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine(); // enter ₂

System.out.println(text); // 2, not ₂

输入一个下标编号,比如 ,其实是 ,没有下标text2

测试

现在,我试图在这里排除一些经典的原因。

印刷?

您也可以比较字符串而不是打印它,它仍然不正确:

Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine(); // enter ₂

System.out.println(text.equals("₂")); // false
System.out.println(text.equals("2")); // true

扫描器?

扫描仪能够正确地做到这一点,例如,如果输入为:String

Scanner scanner = new Scanner("₂");
String text = scanner.nextLine();

System.out.println(text); // now prints ₂

System.in?

如果完全分解,问题仍然存在,例如:Scanner

byte[] data = System.in.readAllBytes(); // enter ₂
String text = new String(data, StandardCharsets.UTF_8).trim();

System.out.println(text);  // 2, not ₂

编码?

这似乎不是Unicode/编码的一般问题。输入另一个字符(如 🤔 )时,它会按预期工作。

Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine(); // enter 🤔

System.out.println(text); // 🤔

假设

似乎下标在控制台输入和 之间丢失了,甚至可能在到达 Java 之前就丢失了。System.in

也许这是我不知道的控制台特定怪癖?我用 VSC 和 Windows CMD (Java 18) 尝试过。

爪哇岛 io 安慰 java.util.scanner 下标

评论

0赞 Michael Easter 1/13/2023
FWIW,代码片段在 Mac OS 上使用 JDK 18 对我来说可以正常工作。
0赞 Zabuzard 1/13/2023
很高兴知道。那么我想这可能是所使用的特定控制台的问题。

答: 暂无答案