将字符串数组转换为整数数组
Posted
技术标签:
【中文标题】将字符串数组转换为整数数组【英文标题】:Converting String Array to an Integer Array 【发布时间】:2013-09-21 05:43:11 【问题描述】:所以基本上用户从扫描仪输入输入序列。
12, 3, 4
等
它可以是任意长度,并且必须是整数。
我想将字符串输入转换为整数数组。
所以int[0]
将是12
,int[1]
将是3
,等等。
有什么建议和想法吗?我正在考虑实现if charat(i) == ','
获取先前的数字并将它们一起解析并将其应用于数组中当前可用的插槽。但我不太确定如何编写代码。
【问题讨论】:
扫描仪输入的代码是什么? 这是一个重复的问题***.com/questions/6881458/… 这是一个可以帮助你的函数:***.com/a/43613298/7919904 这能回答你的问题吗? Converting a String Array to an Int array 【参考方案1】:您可以从扫描仪读取整个输入行,然后将行拆分为,
,然后您有一个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's answer 所建议的那样,以上可以在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[]
末尾的无效元素将由0
表示,需要删除这些元素以区分@987654332 的有效输入值@。
结果
输入:“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]
您可以通过不捕获异常 (see this question for more on this) 并使用不同的方法检查有效整数来潜在地提高性能。
【讨论】:
Java 恶魔,你说的这个“// 以及如果继续添加其他数字的另一个索引”是什么意思?如果我想将其他人添加到数组中怎么办? @Euridice01 这只是处理无效输入的建议。考虑输入4,6,z,10
。这里z
会导致NumberFormatException
,因此如果继续使用i
作为索引,则在整数数组的第三个位置会有null
。这仅取决于您要如何处理这种情况。我所说的额外索引是忽略z
,所以在最终的整数数组中,第三个数字是10
。【参考方案2】:
一行一行
int [] v = Stream.of(line.split(",\\s+"))
.mapToInt(Integer::parseInt)
.toArray();
【讨论】:
【参考方案3】:Stream.of().mapToInt().toArray()
似乎是最好的选择。
int[] arr = Stream.of(new String[]"1", "2", "3")
.mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(arr));
【讨论】:
【参考方案4】:对于 Java 8 及更高版本:
String[] test = "1", "2", "3", "4", "5";
int[] ints = Arrays.stream(test).mapToInt(Integer::parseInt).toArray();
【讨论】:
【参考方案5】:将 String 数组转换为流并映射到 int 是 java 8 中可用的最佳选择。
String[] stringArray = new String[] "0", "1", "2" ;
int[] intArray = Stream.of(stringArray).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(intArray));
【讨论】:
【参考方案6】:import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class MultiArg
Scanner sc;
int n;
String as;
List<Integer> numList = new ArrayList<Integer>();
public void fun()
sc = new Scanner(System.in);
System.out.println("enter value");
while (sc.hasNextInt())
as = sc.nextLine();
public void diplay()
System.out.println("x");
Integer[] num = numList.toArray(new Integer[numList.size()]);
System.out.println("show value " + as);
for (Integer m : num)
System.out.println("\t" + m);
但要终止 while 循环,您必须将任何字符放在输入的末尾。
例如。输入:
12 34 56 78 45 67 .
输出:
12 34 56 78 45 67
【讨论】:
【参考方案7】:Java 有一个方法,“convertStringArrayToIntArray”。
String numbers = sc.nextLine();
int[] intArray = convertStringArrayToIntArray(numbers.split(", "));
【讨论】:
是哪个包和类? @EugeneMamaev 它在org.alfonz.utility
github.com/petrnohejl/Alfonz/blob/…以上是关于将字符串数组转换为整数数组的主要内容,如果未能解决你的问题,请参考以下文章