nextLine () и неправильное поведение цикла while в unicode-16 - PullRequest
0 голосов
/ 21 января 2019

Редактировать: Это на самом деле превратилось в довольно интересную проблему. После некоторой помощи от комментаторов я разместил ответ. Я должен упомянуть, что мой проект в 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 голосов
/ 21 января 2019

Никто из них не опубликовал ответ, но с помощью GBlodgett и StephenC интересный ответ в конце концов появился.

Проблема заключалась в том, что проект по необходимости находится в кодировке UTF, а символ BOM (U-FEFF) добавлялся в начало пользовательского ввода, делая его длиной 5 символов. .

Решением было удалить символ спецификации сразу после сбора:

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

Однако до сих пор остается загадочным, почему ни одна спецификация не была добавлена ​​к первому входу, а только к последующим. Похоже, Запуск 1 не должен был работать.

0 голосов
/ 21 января 2019

Я попробовал этот код, и он работает нормально.

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...