我正在拆分由空格分隔的数字串,如下所示:
Integer.valueOf(input.split(" ")[i]);
但是,如果用户输入1 2 3 4 5
,2 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]);
}
答案 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
总是非常有帮助,这样我们就可以复制您所看到的内容。
假设scan
是Scanner
并且您在粘贴的行之前没有进行其他输入处理,则未使用的调用将scan.next()
调用,使扫描程序超过第一个输入的标记,是你的输入混乱。尝试评论该行,input
应包含整行文字。