Java 使用Scanner和nextLine结束程序

Java 使用Scanner和nextLine结束程序,java,java.util.scanner,Java,Java.util.scanner,我应该创建一个程序,该程序会一直从命令行读取用户输入,直到用户类型退出为止。我还将使用indexOf来获取所有空格字符的位置 我尝试了以下几点: import java.util.Scanner; import java.lang.String; public class Aufgabe6b { public static void main(String[] args) { Scanner scanner=new Scanner(System.in);

我应该创建一个程序,该程序会一直从命令行读取用户输入,直到用户类型退出为止。我还将使用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有问题

如果我键入:

你好,这是一个测试退出,它没有退出。 如果我键入quit,它会打断队列。 如果我输入quit hello这是一个测试,我不会退出

我应该只使用indexOf和Scanner以及nextLine方法。这是否可能,我做错了什么?

一个选项是:

while(true)
{
  a=scanner.nextLine();
  int j = a.indexOf("quit");
  if (j >= 0) 
     break;
}
如果存在单词“quit”,则
indexOf
方法将返回正值

代码中的问题是:
if(“quit”.equals(a))

要使此条件为true,“a”必须完全等于“quit”,与任何其他字符串相比,即使稍有不同,也将返回false

希望这能解决问题:)

编辑:要查找发生次数,请执行以下操作:

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++;
    }

}
编辑:查找位置

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);
        }

    }
公共静态LinkedList定位器(字符串源,字符串模式){
LinkedList=新建LinkedList();
int index=source.indexOf(模式);
如果(索引==-1)返回列表;
列表。添加(索引);
while(true){
index=source.indexOf(模式,索引+1);
如果(索引==-1)返回列表;
列表。添加(索引);
}
}

这没用。如果我输入justquit,程序就会退出,因为j仍然是0。如果我退出了类型测试,j是5,它不会结束。我的意思是,在if的情况下,我可以使j>0,但如果我键入quit,它不会退出,因为j仍然是0。我现在尝试>=0,它似乎有效。你还能帮我收集用户输入的所有空间吗?例如:“测试Hello Guy”应该是2。我必须使用indexOf,但它只告诉我第一个空格不是全部。Thx:)还有办法给我所有的“”位置吗?不仅仅是一行,我的意思是如果我在测试中输入Hello,我的主退出,他会告诉我“”在位置4,3,我猜就是这样。我必须使用indexOf,我尝试了a.indexOf(“”),它对第一个位置很有效,但对第二个和以后的位置无效。请检查编辑,我为您创建了一个方法来查找发生次数,另一个方法用于查找所有位置无问题,很高兴提供帮助:)