Использование сканера и nextLine для завершения программы

1

я должен создать программу, которая продолжает читать пользовательский ввод из командной строки до тех пор, пока пользовательские типы не выйдут. Я также буду использовать indexOf, чтобы получить позицию всех пробелов.

Я пробовал:

import java.util.Scanner; 
import java.lang.String;
public class Aufgabe6b {

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);

        String a;
        System.out.println("Bitte Eingabe machen!");
        while(true){

            a=scanner.nextLine();
        if("quit".equals(a)){
            break;
        }
        }
        System.out.println(a.indexOf(" "));
    }
}

В то время как a.indexOf дает мне только первое место, которое он обнаружил, у меня все еще есть проблема со сканером и выходом.

Если я напечатаю:

Привет, это тестовый выход, он не уходит. если я просто закрою, он прерывает очередь. если я нахожу quit hello, это тест, я не ухожу.

Я должен использовать только indexOf и сканер, а также метод nextLine. Возможно ли, что я не так?

Теги:
java.util.scanner

1 ответ

1
Лучший ответ

Один из вариантов:

while(true)
{
  a=scanner.nextLine();
  int j = a.indexOf("quit");
  if (j >= 0) 
     break;
}

Если слово "quit" присутствует, метод indexOf вернет положительное значение.

Проблема в вашем коде здесь: if("quit".equals(a))

Для того чтобы это условие было истинным, "a" должно быть точно равно "quit", по сравнению с любой другой строкой, которая даже немного отличается, вернет false.

Надеюсь, это решает это :)

EDIT: чтобы найти число вхождений:

public static int OccurenceFinder(String source, String pattern) {
    int counter = 0;
    int index = source.indexOf(pattern);
    if (index == -1) return 0;
    counter++;
    while (true) {
        index = source.indexOf(pattern, index + 1);
        if (index == -1) return counter;
        counter++;
    }

}

EDIT: найти позиции

public static LinkedList<Integer> PositionFinder(String source, String pattern) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        int index = source.indexOf(pattern);
        if (index == -1) return list;
        list.add(index);
        while (true) {
            index = source.indexOf(pattern, index + 1);
            if (index == -1) return list;
            list.add(index);
        }

    }
  • 0
    Это не помогло. Если я набираю только quit, программа завершает работу, так как j по-прежнему равен 0. Если я набираю test quit, j равно 5, и оно не заканчивается. Я имею в виду, что я мог бы сделать j> 0 в случае if, но все же, если я наберу, просто выход, он не выйдет, так как j по-прежнему 0. Я попытался сейчас> = 0, и это, кажется, работает. Вы все еще можете помочь мне собрать ВСЕ пространство, введенное пользователем? Например: «Test Hello Guy» должно быть 2. Я должен использовать indexOf, но он просто сообщает мне первый пробел, а не все.
  • 0
    Проверьте редактирование, теперь оно должно работать :)
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню