【问题标题】:Splitting a string in Java,在Java中拆分字符串,
【发布时间】:2013-02-07 02:41:47
【问题描述】:

我正在尝试将一个字符串拆分为一个字符串数组,但是当它拆分字符串时,只有 第一部分,在拆分之前,位于 [0] 插槽中的数组中,但在 [1] 或更高版本中没有任何内容。这在尝试输出 spliced[1] 时也会返回 java 异常错误

import java.util.Scanner;

public class splittingString
{

    static String s;


    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the length and units with a space between them");
        s = input.next();
        String[] spliced = s.split("\\s+");
        System.out.println("You have entered " + spliced[0] + " in the units of" + spliced[1]);
    }

}

【问题讨论】:

  • 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。
  • 您是否已验证输入是否符合您的预期。
  • 我试过用“\\s”和“”分割同样的问题,如果你打印出数组的长度它总是1
  • 尝试使用标记器和循环并将每个标记分配给数组docs.oracle.com/javase/6/docs/api/java/util/…
  • 如果数组的长度为 1,那么它只有 spliced[0] 中的一个元素,尝试访问 spliced[1] 会抛出一个 IndexOutOfBoundsException。你能打印 s 让我们知道它是什么吗?

标签: java string split java.util.scanner arrays


【解决方案1】:

你应该使用:-

input.nextLine()

目前,您正在使用 next 将返回空格分隔

【讨论】:

  • 我很高兴,您可以在 javadocs 中看到一些其他方法,这些方法允许您读取两个“拼接”结果,而无需调用 split。即 input.nextDouble() 和 input.next()
【解决方案2】:

input.next() 读取单个单词而不是整行(即将在第一个空格处停止)。要阅读整行,请使用input.nextLine()

【讨论】:

    【解决方案3】:

    假设您的输入是12 34,则s 变量的内容是12,而不是12 34。您应该使用Scanner.nextLine() 阅读整行。

    【讨论】:

      【解决方案4】:

      问题不在于split() 函数调用。而是问题在于您用于从控制台读取输入的函数。

      next() 只读取您键入的第一个单词(在遇到第一个空格后基本上不读取)。

      改为使用nextLine()。它将读取整行(包括空格)。

      这里是更正的代码:

      import java.util.Scanner;
      
      public class StringSplit {
      
          static String s;
      
          public static void main(String[] args) {
              Scanner input = new Scanner(System.in);
              System.out
                      .println("Enter the length and units with a space between them");
              s = input.nextLine();
              String[] spliced = s.split("\\s+");
              System.out.println("You have entered " + spliced[0]
                      + " in the units of" + spliced[1]);
      
          }
      
      }
      

      【讨论】:

      • @Arpit 哈哈,当您发表评论时,我实际上是在写它。太快了:P
      • 我急于为每个正确的答案投票。并切换到下一个问题。 ;)
      猜你喜欢
      • 2015-03-30
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多