您可以从扫描仪读取整个输入行,然后将行拆分,,
然后您有一个String[]
,将每个数字解析为int[]
索引一对一匹配...(假设输入有效且没有NumberFormatExceptions
)
String line = scanner.nextLine();
String[] numberStrs = line.split(",");
int[] numbers = new int[numberStrs.length];
for(int i = 0;i < numberStrs.length;i++)
{
// Note that this is assuming valid input
// If you want to check then add a try/catch
// and another index for the numbers if to continue adding the others (see below)
numbers[i] = Integer.parseInt(numberStrs[i]);
}
正如YoYo 的回答所暗示的,以上可以在 Java 8 中更简洁地实现:
int[] numbers = Arrays.stream(line.split(",")).mapToInt(Integer::parseInt).toArray();
处理无效输入
您将需要考虑在这种情况下您需要做什么,您是否想知道该元素的输入错误或只是跳过它。
如果您不需要了解无效输入但只想继续解析数组,您可以执行以下操作:
int index = 0;
for(int i = 0;i < numberStrs.length;i++)
{
try
{
numbers[index] = Integer.parseInt(numberStrs[i]);
index++;
}
catch (NumberFormatException nfe)
{
//Do nothing or you could print error if you want
}
}
// Now there will be a number of 'invalid' elements
// at the end which will need to be trimmed
numbers = Arrays.copyOf(numbers, index);
我们应该修剪结果数组的原因是,末尾的无效元素int[]
将由 a 表示0
,需要删除这些元素以区分 的有效输入值0
。
结果是
输入:“2,5,6,bad,10”
输出:[2,3,6,10]
如果您稍后需要了解无效输入,您可以执行以下操作:
Integer[] numbers = new Integer[numberStrs.length];
for(int i = 0;i < numberStrs.length;i++)
{
try
{
numbers[i] = Integer.parseInt(numberStrs[i]);
}
catch (NumberFormatException nfe)
{
numbers[i] = null;
}
}
在这种情况下,错误的输入(不是有效的整数)元素将为空。
结果是
输入:“2,5,6,bad,10”
输出:[2,3,6,null,10]
您可以通过不捕获异常来潜在地提高性能(有关此问题的更多信息,请参见此问题)并使用不同的方法来检查有效整数。