я должен создать программу, которая продолжает читать пользовательский ввод из командной строки до тех пор, пока пользовательские типы не выйдут. Я также буду использовать 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. Возможно ли, что я не так?
Один из вариантов:
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);
}
}