【问题标题】:Split method is splitting into single String拆分方法是拆分成单个字符串
【发布时间】:2014-08-13 12:52:59
【问题描述】:

我有一个小问题: 我有一个程序用空格分割一个字符串(只有一个 ws),但是当我将该值分配给字符串数组时,它里面只有一个对象。 (我只能打印'0'索引)。 代码如下:

public void mainLoop() {
        Scanner sc = new Scanner(System.in);

        String parse = "#start";

        while (!parse.equals("#stop") || !parse.isEmpty()) {
            parse = sc.next();

            String[] line = parse.split("[ ]");
            System.out.println(line[0]);
        }
}

'mainLoop' 是通过方法'main' 从实例调用的。

【问题讨论】:

  • 尝试在\s上拆分,像这样:parse.split("\\s")
  • Pattern 应该可以工作。对于哪个输入 String 这会给您带来问题?
  • 你能写出input和预期的result的例子吗?
  • @SeniorJD 输入应该是:'hello world!'结果应该是: 0:'hello' 1:'world!'但我的结果是 0:'hello\nworld!' (数字是数组中对象的索引)。
  • @DrunkCoder 即使您输入#stop,您的程序也永远不会结束尝试&& 运算符而不是||

标签: java string split java.util.scanner


【解决方案1】:

默认情况下,Scanner#next 使用空格分隔输入。您可以使用 nextLine 从 Scanner 读取而不使用此分隔符模式

parse = sc.nextLine();

comments前面提到的几点依然有效

while (!parse.equals("#stop") && !parse.isEmpty()) {
    parse = sc.nextLine();

    String[] line = parse.split("\\s");
    System.out.println(Arrays.toString(line));
}

【讨论】:

  • 这种用 [] 分隔空格似乎是故意的,但是:“我有一个程序用空格分割字符串(只有单个 ws)”
【解决方案2】:

当您在扫描仪上调用 next 时,它会从输入中返回下一个令牌。例如,如果用户会写文本

foo bar

第一次调用next 将返回"foo",下一次调用next 将返回"bar"

如果您想以"foo bar"(整行)的形式获取字符串,可以考虑使用nextLine 而不是next


您也不必在[] 中放置空格,因此您可以使用split(" ") 或使用代表空格split("\\s") 的字符类\s 来代替split("[ ]")


您似乎遇到的另一个问题是

while( !condition1 || !condition2 )

如果你想说循环应该继续直到满足任何一个条件,那么你应该把它们写成表格

while( !(condition1 || condition2) )

或使用De Morgan's laws

while( !condition1 && !condition2 )

【讨论】:

    【解决方案3】:

    如果你想用一个空格分割,你为什么不这样做呢?

    String[] line = parse.split(" "); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      相关资源
      最近更新 更多