String.split()删除第一个元素

时间:2015-02-16 20:20:08

标签: java arrays string

我正在拆分由空格分隔的数字串,如下所示:

Integer.valueOf(input.split(" ")[i]);

但是,如果用户输入1 2 3 4 52 3 4 5(两者前面有一个空格)就会出现。这是为什么? 我尝试用input = " " + input在字符串的前面添加一个空格,但它只是在2前面的两个空格。

scan.next();
String input = scan.nextLine();
System.out.println(input);
System.out.println(Integer.valueOf(
        input.split(" ")[0]));
for(int i = 0; i < input.length() - 1; i++) {
        nums[i] = Integer.valueOf(
              input.split(" ")[i]);
}

2 个答案:

答案 0 :(得分:-2)

我假设您要求用户在一行中输入一系列数字。因此,您可能会将1 , 2 3 , 52作为字符串输入值。您希望将数字存储到int数组中。 一种方法是取字符串并删除与数字无关的所有字符,在这种情况下它是空格和komma的。如果有人输入a 1 , 4 59会有问题,但我忽略了这种情况,因为它与问题无关。

String line = scanner.nextLine(); // line = "1 , 2 3 ,  45"

首先删除komma:

String result = line.replaceAll("," , " "); // replaces all komma's with a space.

现在你有一个没有komma的字符串 为避免将两位数转换为2位数,您可以使用StringTokenizer

 StringTokenizer st = new StringTokenizer("this is a test");
     while (st.hasMoreTokens()) {
         System.out.println(st.nextToken());
     }

打印出来:

a

测试

我们可以使用它来删除字符串中数字之间的空格,或者实际上只使用读取为标记的值。

        StringTokenizer resultLine = new StringTokenizer(result);
        int[] numbers = new int[resultLine.countTokens()];
        for (int i = 0; resultLine.hasMoreTokens(); i++) {
            numbers[i] = Integer.parseInt((String) resultLine.nextElement());
        }
        for (int j = 0; j < numbers.length; j++) {
            System.out.print(numbers[j] + " ");
        }
        System.out.println();
    }

最终得到了我们想要的结果,一个整数数组。

    Scanner s = new Scanner(System.in);
    while (s.hasNext()) {
    String line = s.nextLine();
    String result = line.replaceAll(",", " ");
    StringTokenizer resultLine = new StringTokenizer(result);
    int[] numbers = new int[resultLine.countTokens()];
    for (int i = 0; resultLine.hasMoreTokens(); i++) {
        numbers[i] = Integer.parseInt((String) resultLine.nextElement());
    }
    for (int j = 0; j < numbers.length; j++) {
        System.out.print(numbers[j] + " ");
    }
    System.out.println();
}

输入为:1,2,35

输出为:1 2 3 52 // int[] numbers = {1,2,3,52};

我希望这对你有用。

答案 1 :(得分:-2)

当问及&#34;为什么这不按照我期望的方式工作?&#34;和类似的问题一样,提供MVCE总是非常有帮助,这样我们就可以复制您所看到的内容。

假设scanScanner并且您在粘贴的行之前没有进行其他输入处理,则未使用的调用将scan.next()调用,使扫描程序超过第一个输入的标记,是你的输入混乱。尝试评论该行,input应包含整行文字。