如何使用Scanner拆分空格作为分隔符的字符串

时间:2015-03-13 06:23:07

标签: java java.util.scanner

我试图根据单词之间的空格分割输入句子。它没有按预期工作。

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

当我用空格“”替换“ - ”时,它给出了以下输出。

first second third
result.length: 1
==
first

有关此问题的建议吗?我已经提到了stackoverflow帖子How to split a String by space,但它不起作用。

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

first second third
result.length: 1
==
first

5 个答案:

答案 0 :(得分:8)

更改

scanner.next()

scanner.nextLine()

来自javadoc

  

扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。

致电next()会返回下一个 致电nextLine()会返回下一行

答案 1 :(得分:7)

next()的{​​{1}}方法已经将字符串拆分为空格,也就是说,它返回下一个标记,字符串直到下一个字符串。因此,如果添加适当的Scanner,您会看到println等于第一个单词,而不是整个字符串。

inputSentence替换为scanInput.next()

答案 2 :(得分:1)

问题是scaninput.next()只会在第一个空白字符之前读取,因此它只会引入单词first。所以split之后什么都没有完成。

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

答案 3 :(得分:0)

另一种选择是使用运行良好的缓冲Reader类。

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

        }

答案 4 :(得分:-1)

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

它会在每个\\s上分割,代表每个非空白字符。如果元素位于该分隔符之前,之间和之后,则结果为数组

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

示例:

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

有关拆分(&#34; \ s +&#34;)的详细信息,请参阅blow stackoverflow post。

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