将字符串数组转换为整数数组

问题描述 投票:0回答:5
基本上,用户从扫描仪输入中输入序列。

12, 3, 4

等
它可以长度长,必须是整数。
我想将字符串输入转换为整数数组。
所以
int[0]
将是
12
int[1]
将是
3
等。
任何提示和想法?我正在考虑实施
if charat(i) == ','
获取上一个数字并将它们分析在一起,并将其应用于数组中的当前可用插槽。但是我不太确定如何编码。
    

您可以从扫描仪中读取整个输入线,然后按

,
将行分开,然后将每个数字分解为inde,用索引一对一匹配...(假设有效输入和无

String[]
java string integer user-input data-manipulation
5个回答
77
投票
int[]

yoyo的答案暗示,以上可以在Java 8:
中更简单地实现。
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]); }

我们应该修剪产生的数组的原因是,在
int[] numbers = Arrays.stream(line.split(",")).mapToInt(Integer::parseInt).toArray();  
末尾的无效元素将由a表示,需要删除这些元素,以区分有效的输入值。

ressultsin 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[]

在这种情况下,不良输入(不是有效的整数)该元素将为null。
ressultsin

0
您可能会通过不捕获例外来提高性能(请参阅此问题以获取更多信息),并使用其他方法检查有效的整数。
    
线

0

与替代性as

Input: "2,5,6,bad,10" Output: [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; } }

这不需要字符串数组在内存中,我们进行了增量解析以产生整数。此外,由于对

Input: "2,5,6,bad,10" Output: [2,3,6,null,10]
的输入是一个
int [] v = Stream.of(line.split(",\\s+")) .mapToInt(Integer::parseInt) .toArray();
,而不仅仅是

Arrays.stream(),我们现在还可以使用缓冲字符源以避免在内存中包含完整的输入源。 还请参见

我如何创建一系列正则匹配项?

44
投票

int [] v = Arrays.stream(line.split(",\\s+")) .mapToInt(Integer::parseInt) .toArray();
似乎是最好的选择。

int [] v = Pattern.compile(",\\s+").splitAsStream(line) .mapToInt(Integer::parseInt) .toArray();


对于Java 8及更高:
splitAsStream

将字符串数组转换为流并映射到int是Java 8中的最佳选项。

CharSequece

    
String
但是,要终止WARE循环,您必须将任何充电器放在输入末尾。

ex。输入:

Stream.of().mapToInt().toArray()

输出:

6
投票
int[] arr = Stream.of(new String[]{"1", "2", "3"}) .mapToInt(Integer::parseInt).toArray(); System.out.println(Arrays.toString(arr));


String[] test = {"1", "2", "3", "4", "5"}; int[] ints = Arrays.stream(test).mapToInt(Integer::parseInt).toArray();
Resault是[12,13];

4
投票

java有一种方法为“ convertstringarraytointarray”。

String[] stringArray = new String[] { "0", "1", "2" }; int[] intArray = Stream.of(stringArray).mapToInt(Integer::parseInt).toArray(); System.out.println(Arrays.toString(intArray));
    

2
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.