如何使用 Scanner 拆分以 space 为分隔符的字符串

How to split a string with space being the delimiter using Scanner

我正在尝试根据单词之间的 space 拆分输入句子。它没有按预期工作。

public static void main(String[] args) {
    Scanner scaninput=new Scanner(System.in);
    String inputSentence = scaninput.next();
    String[] result=inputSentence.split("-");
    // for(String iter:result) {
    //     System.out.println("iter:"+iter);
    // }
    System.out.println("result.length: "+result.length);
    for (int count=0;count<result.length;count++) {
        System.out.println("==");
        System.out.println(result[count]);
    }
}

当我在拆分中使用“-”时,它给出了以下输出:

fsfdsfsd-second-third
result.length: 3
==
fsfdsfsd
==
second
==
third

当我用 space " " 替换 "-" 时,它给出了以下输出。

first second third
result.length: 1
==
first

关于这里的问题有什么建议吗?我已经参考了Whosebug post How to split a String by space,但它不起作用。

使用 split("\s+") 给出此输出:

first second third
result.length: 1
==
first

问题是 scaninput.next() 只会读到第一个空白字符,所以它只会拉入单词 first。所以split之后什么也没做。

我建议不要使用 Scanner,而是使用 java.io.BufferedReader,这样您就可以 read an entire line at once.

Scannernext()方法已经在空格上分割了字符串,即returns下一个token,字符串直到下一个字符串。因此,如果您添加适当的 println,您会看到 inputSentence 等于第一个单词,而不是整个字符串。

scanInput.next()替换为scanInput.nextLine()

使用src.split("\s+");代替inputSentence.split("-");

它在代表每个 非空白字符 的每个 \s 上拆分。如果元素在该定界符之前、之间和之后,则结果为 array

下面是您需要的完整示例。

示例:

public class StringSplit {
    public static void main(String[] args) 
    {
        String src = "first second third";
        String[] stringArray = src.split("\s+");

        System.out.println(stringArray[0]);
        System.out.println(stringArray[1]);
        System.out.println(stringArray[2]);
    }
}

有关 split("\s+") 工作原理的更多详细信息,请参阅 blow Whosebug post。

How exactly does String.split() method in Java work when regex is provided?

改变

scanner.next()

scanner.nextLine()

来自javadoc

A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.

正在调用 next() returns 下一个 word
调用 nextLine() returns 下

另一种选择是使用缓冲 Reader class,效果很好。

String inputSentence;

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            inputSentence=br.readLine();

            String[] result=inputSentence.split("\s+");
rintln("result.length: "+result.length);

            for(int count=0;count<result.length;count++)
            {
                System.out.println("==");
                System.out.println(result[count]);
            }

        }