我输入一个String,它是一组在它们之间有空格的数字,例如:
"30 129 48 29 110 90"
我想要做的是获取该String并将其作为整数输入到数组中,而不首先使用将数字存储为字符串的第二个数组。这就是我所知道的:
String line = input.nextLine();
String[] arr = line.split(" ");
int[] array = new int[arr.length];
for (int i = 0; i < arr.length; i++){
array[i] = Integer.parseInt(arr[i]);
}
我想不要让两个数组完成这项工作,但是在某种程度上让它在for循环中一次完成,我只是想这样,因为它对我的眼睛更好,我喜欢编写干净的代码我以后可以轻松纠正。
编辑:在jogabonito回答之后,这就是我设法做的事情Scanner input = new Scanner(System.in);
System.out.printf("Input: ");
StringTokenizer line = new StringTokenizer(input.nextLine());
int[] numbers = new int[line.countTokens()];
for (int i = 0; line.hasMoreTokens(); i++){
numbers[i] = Integer.parseInt((String)line.nextElement());
}
答案 0 :(得分:4)
您当前的方法很好,但如果您希望您“可以”使用StringTokenizer执行此操作。
创建一个由countElements()
确定的大小的int [],然后在while -loop中创建一个Integer.parseInt(tokenizer.nextElement())
经过测试的代码:
String input = "30 129 48 29 110 90";
StringTokenizer tokenizer = new StringTokenizer(input);
int count = tokenizer.countTokens();
int x[] = new int[count];
int i=0;
while (tokenizer.hasMoreElements()) {
x[i++] = Integer.parseInt((String)tokenizer.nextElement());
}
答案 1 :(得分:1)
您可以使用Scanner:
Scanner sc = new Scanner(System.in);
while sc.hasNextInt()
int i = sc.nextInt();
我不知道它是否更具可读性,或者即使性能更好。但它肯定是另一种方式。而且你无法预先知道有多少总数,所以你需要使用一个列表。
答案 2 :(得分:1)
您确定要使用数组而不是Collection吗?
我认为有以下几点
String input = "30 129 48 29 110 90";
List<Integer> list = new ArrayList<Integer>();
for (String token: input.split(" ")) {
list.add( Integer.valueOf( token ) );
}
您当然可以将列表转换为数组:
Integer[] array = list.toArray( new Integer[] {} );
答案 3 :(得分:0)
我只是想要它,因为它对我的眼睛会更好,我喜欢编写干净的代码,以后我可以轻松纠正。
在这种情况下,不要改变一件事。你拥有的东西可能是可读的。