分割字符串并将其放入整数数组中

38

我需要输入一个带有数字的字符串,例如:1,2,3,4,5。 这是输入的示例,然后我需要将其放入INT数组中,以便我可以对其进行排序,但它并没有按照应该工作的方式工作。

package array;

import java.util.Scanner;

public class Array {

    public static void main(String[] args) {
        String input;
        int length, count, size;
        Scanner keyboard = new Scanner(System.in);
        input = keyboard.next();
        length = input.length();
        size = length / 2;
        int intarray[] = new int[size];
        String strarray[] = new String[size];
        strarray = input.split(",");

        for (count = 0; count < intarray.length ; count++) {
            intarray[count] = Integer.parseInt(strarray[count]);
        }

        for (int s : intarray) {
            System.out.println(s);
        }
    }
}

不按照应该工作的方式工作。以何种方式?出现错误吗?无法处理不良输入?s始终为空吗? - Conrad Frix
3
将字符串 input 按逗号分隔成一个字符串数组 strArr,然后直接将 strArr 复制到一个整数数组 intArr 中。 - Enrique
8个回答

61

对于输入 1,2,3,4,5,该输入的长度为9。9/2 = 4 在整数运算中等于4,因此您只存储了前4个变量,而不是全部5个。

即使您解决了这个问题,如果传入10,11,12,13这样的输入,程序也会出现严重错误。

如果您使用1,2,3,4,50作为输入,这个程序竟然可以(凑巧地)工作 :-)

最好采用以下做法:

String[] strArray = input.split(",");
int[] intArray = new int[strArray.length];
for(int i = 0; i < strArray.length; i++) {
    intArray[i] = Integer.parseInt(strArray[i]);
}

为了日后参考,当你遇到错误时,我强烈建议你将错误信息和代码一起发布。这样可以确保不需要有jdk的人也能够调试代码并解决问题!:)


41

Java 8 提供了基于流的替代手动迭代的方法:

int[] intArray = Arrays.stream(input.split(","))
    .mapToInt(Integer::parseInt)
    .toArray();

如果输入可能包含无法转换为整数的字符序列,那么请准备好捕获NumberFormatException


4
注意:对于Android开发者而言,您还需要最低SDK版本为24,以及Java 8。 - Guru raj

2

假设输入为 "1,2,3,4"。

这意味着输入长度为7。现在你写的 size = 7/2 = 3.5。但是,由于 size 是一个 int 类型,它将被四舍五入为3。也就是说,你会丢失一个值。

如果你按照下面的代码重写它,它应该可以正常工作:

String input;
int length, count, size;
Scanner keyboard = new Scanner(System.in);
input = keyboard.next();
length = input.length();

String strarray[] = input.split(",");
int intarray[] = new int[strarray.length];

for (count = 0; count < intarray.length ; count++) {
    intarray[count] = Integer.parseInt(strarray[count]);
}

for (int s : intarray) {
    System.out.println(s);
}

0

你正在进行整数除法,如果用户恰好输入奇数个数字,则会丢失正确的长度 - 这是我注意到的一个问题。因此,当我使用“1,2,3,4,5,6,7”作为输入运行代码时,我的最后一个值被忽略了...


0
List<String> stringList = new ArrayList<String>(Arrays.asList(arr.split(",")));
List<Integer> intList = new ArrayList<Integer>();
for (String s : stringList) 
   intList.add(Integer.valueOf(s));

这并没有回答问题。问题是关于创建一个int数组,而不是List<Integer> - Ruzihm

0
String input = "2,1,3,4,5,10,100";
String[] strings = input.split(",");
int[] numbers = new int[strings.length];
for (int i = 0; i < numbers.length; i++)
{
  numbers[i] = Integer.parseInt(strings[i]);
}
Arrays.sort(numbers);

System.out.println(Arrays.toString(numbers));

我建议你使用这个: numbers[i] = Integer.parseInt(strings[i].trim()) 否则,如果字符串是"4,22,42",它会抛出异常。 - Ray Britton

0

稍微改变一下你做事情的顺序。你似乎没有任何特定的原因就在除以2。

虽然你的应用程序不能保证输入字符串是分号分隔的变量,但你可以很容易地让它这样做:

package com;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // Good practice to initialize before use
        Scanner keyboard = new Scanner(System.in);
        String input = "";
        // it's also a good idea to prompt the user as to what is going on
        keyboardScanner : for (;;) {
            input = keyboard.next();
            if (input.indexOf(",") >= 0) { // Realistically we would want to use a regex to ensure [0-9],...etc groupings 
                break keyboardScanner;  // break out of the loop
            } else { 
                keyboard = new Scanner(System.in);
                continue keyboardScanner; // recreate the scanner in the event we have to start over, just some cleanup
            }
        }

        String strarray[] = input.split(","); // move this up here      
        int intarray[] = new int[strarray.length];

        int count = 0; // Declare variables when they are needed not at the top of methods as there is no reason to allocate memory before it is ready to be used
        for (count = 0; count < intarray.length; count++) {
            intarray[count] = Integer.parseInt(strarray[count]);
        }

        for (int s : intarray) {
            System.out.println(s);
        }
    }
}

除以2是因为假设每个数字都有一个对应的逗号。当然,我们知道这是一种错误的假设,但我相信这是当时OP的思路。 - corsiKa

0

类似这样:

  public static void main(String[] args) {
   String N = "ABCD";
   char[] array = N.toCharArray();

   // and as you can see:
    System.out.println(array[0]);
    System.out.println(array[1]);
    System.out.println(array[2]);
  }

@Downvoters,请至少评论一下你们的负评原因。 - Kartik Chugh
@K_7 "输入一个带有数字的字符串,例如:1,2,3,4,5",而不是"ABCD"。 - Patrick Parker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接