unicode-16中的nextLine()和while循环异常

时间:2019-01-21 03:36:25

标签: java while-loop java.util.scanner

编辑:这实际上变成了一个非常有趣的问题。在评论员的帮助下,我发布了一个自我解答。我应该提到我的项目使用的是Unicode-16,看来这是麻烦的根源。

问题在于,循环看起来没有那么简单,而是没有按预期退出:

import java.util.Scanner;

public class Lambda2 {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();
        while (!input.equals("exit")){
            System.out.println("input is \""+ input + "\"");
            System.out.println(input.equals("exit"));

            input = in.nextLine();
        }
        System.out.println("Thank you!");
    }
}

运行1:

exit
Thank you!

到目前为止,太好了。但是当我进入循环时,就会遇到麻烦:

运行2:

asdf
input is "asdf"
false
exit
input is "exit"
false
exit
input is "exit"
false

最后一次检查"exit".equals("exit")应该返回true,而不是false。我尝试在输入中使用trim(),以防万一有一些换行的骷髅手……我到底想念什么?

2 个答案:

答案 0 :(得分:1)

他们两个都没有发布答案,但是在GBlodgettStephenC的帮助下,最终出现了一个有趣的答案。

问题在于,该项目必须使用UTF编码,并且在用户输入的开头添加了BOM字符(U-FEFF),使其长度为5个字符。 / p>

解决方案是在收集后立即删除BOM字符:

input = input.replace("\uFEFF", "");

然而,仍然有些神秘的原因是为什么没有将BOM添加到第一个输入,而仅添加到随后的输入。似乎运行1 不起作用。

答案 1 :(得分:0)

我尝试了这段代码,它工作正常。

enter image description here

enter image description here