【问题标题】:How to split a string with space being the delimiter using Scanner如何使用 Scanner 以空格为分隔符拆分字符串
【发布时间】:2015-03-13 06:23:07
【问题描述】:

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

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

【问题讨论】:

  • 如果有多个空格,请尝试使用\\s+。向我们展示您完全尝试了什么。
  • 这是输出 first second 第三 result.length: 1 == first
  • 在我的问题中添加了相同的内容以获得更好的视图。无法在评论中格式化
  • 显示修改后的代码.. 把它放到你的程序中。整个代码..

标签: java java.util.scanner


【解决方案1】:

改变

scanner.next()

scanner.nextLine()

来自javadoc

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

调用next() 会返回下一个单词
调用nextLine() 返回下一个

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 扫描器没有错,他只需要使用nextLine()或更改分隔符。
      • 哪个更好? Scanner 还是 bufferedReader?
      【解决方案4】:

      另一种选择是使用运行良好的缓冲 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]);
                  }
      
              }
      

      【讨论】:

        【解决方案5】:

        使用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+") 工作原理的更多详细信息,请参阅 stackoverflow 帖子。

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

        【讨论】:

        • \swhitespace,而不是 non-whitespace
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 2011-03-24
        相关资源
        最近更新 更多