Java Scanner возвращает ноль, но уже отфильтрован - PullRequest
0 голосов
/ 19 ноября 2018
public void process() throws InputMismatchException {
    //System.out.println(code);



    if(sc.findInLine("JP++") == null || sc.findInLine("START") == null){
        throw new RuntimeException("Program has to start with 'JP++ _NAME_ START' ");



    }
    sc.nextLine();
    while(sc.hasNext()){
            if (sc.findInLine(Pattern.compile("JP......")) != "JP++ END" ){
                Scanner r = sc;
                if(!r.hasNextLine() || r.findInLine(Pattern.compile(".")) == null){
                    return;
                }
                System.out.println(sc.nextLine());

            }

    }

}

Этот код является частью лексера, над которым я сейчас работаю.Я уже отфильтровал, чтобы сканер не выводил ноль, и он все еще выводит:

hello 
world
null

мой ввод: " JP++ HELLO WORLD START \n hello \n world\n JP++ END"

Как я могу решить эту проблему

1 Ответ

0 голосов
/ 19 ноября 2018

Я только что проверил этот код:

    String input = "   JP++ HELLO WORLD START \n hello \n world\n JP++ END";
    Scanner sc = new Scanner(input);

    if(sc.findInLine("JP++") == null || sc.findInLine("START") == null){
        throw new RuntimeException("Program has to start with 'JP++ _NAME_ START' ");
    }
    sc.nextLine();
    while(sc.hasNext()){
            if (sc.findInLine(Pattern.compile("JP......")) != "JP++ END" )  {
                Scanner r = sc;
                if(!r.hasNextLine() || r.findInLine(Pattern.compile(".")) == null){
                    return;
                }
                System.out.println(sc.nextLine());
            }
    }

Это буквально копия и вставка вашего кода, за исключением ввода (который я также буквально скопировал из вашего поста) и объявления Scanner.Он печатает

привет
world

без нуля.Какая бы ни была ваша проблема, она в другом месте.

Редактировать: Как упоминает @Pshemo, вы также неправильно сравниваете свою строку.Используйте .equals ()

...