在Java中,如何将包含大量空格的数字字符串转换为一系列Int变量。
因此,我将从JOptionPane上的输入框中得到三个数字,它们之间用未知数量的空格分隔(空格也可能在数字之间变化,第一个和第二个之间有五个,第二个和第三个之间可能有8个),我需要的是,取下这些数字,并在我的代码的其余部分中将它们作为变量使用。我很难在字符串中将这些数字分配给三个变量。我试图做的是使用trim()去掉所有空格,然后将位置0、1和2的charAt()分别解析到每个变量中。每次我都会收到一个错误,内容如下: 线程“main”java.lang.NumberFormatException中的“异常”:基数56大于java.lan.Integer.parseInt处的Character.MAX_基数(未知源) 注: 我在第一次解析时就停止了,因为它不起作用,我会继续解析另外两个,但当第一次解析不起作用时,就没有意义了 我用于此位的代码是:在Java中,如何将包含大量空格的数字字符串转换为一系列Int变量。,java,string,Java,String,因此,我将从JOptionPane上的输入框中得到三个数字,它们之间用未知数量的空格分隔(空格也可能在数字之间变化,第一个和第二个之间有五个,第二个和第三个之间可能有8个),我需要的是,取下这些数字,并在我的代码的其余部分中将它们作为变量使用。我很难在字符串中将这些数字分配给三个变量。我试图做的是使用trim()去掉所有空格,然后将位置0、1和2的charAt()分别解析到每个变量中。每次我都会收到一个错误,内容如下: 线程“main”java.lang.NumberFormatExceptio
String values = "0";
int numLinks = 0;
int start = 0;
int numPass = 0;
values = JOptionPaine.showInputDialog(null, "Enter Values: ", JOptionPane.QUESTION_MESSAGE);
values.trim();
numLinks = Integer.parseInt(values, values.char.At(0));
System.out.print(numLinks);
感谢您的帮助!您使用的
parseInt
错误。其签名为
public static int parseInt(String s, int radix)
您将一个升级为int的字符作为第二个参数传递,然后将其编码值用作基数,这是错误的。忘记第二个参数(我假设您使用的是基数10)
此外,.trim()
只删除前导和尾随空格。要删除数字之间的空格,应使用
String[] tokens = values.split("\\s+")
它将字符串拆分为由指定的正则表达式(即“一个或多个空白字符”)分隔的标记。之所以
parseInt
失败,是因为传递的第二个参数被解释为基数(读取数字的数字基),这肯定不是您希望实现的目标
当您有一个字符串,其中有多个数字由可变数量的空白字符分隔时,您可以使用进行读取:
Scanner sc = new Scanner(values);
List<Integer> list = new ArrayList<Integer>();
while (sc.hasNextInt()) {
list.add(sc.nextInteger());
}
Scanner sc=新扫描仪(值);
列表=新的ArrayList();
while(sc.hasnetint()){
list.add(sc.nextInteger());
}
此时,
List
包含输入字符串中的数字,转换为Integer
类型。我可以将它们放在数组中而不是数组列表中吗?只要在每次添加值时增加索引,然后这样做即可。@bobHarding您可以将列表转换为数组。数组的问题在于gh,就是你需要在创建它时知道它的大小。另一方面,列表可以让你在创建时添加元素。有效!不过我一次只能从用户那里收到3个数字,这样我就可以使用数组了。我只扫描了3次,因为正如我所说的,我知道用户只会给我3个输入。@bobHarding我很高兴看到它这对你来说是有效的。如果你不再寻找一个问题的改进答案,请考虑点击旁边的灰色复选标记来接受答案。这会让其他网站访问者知道问题已经解决,并在堆栈溢出上为你赢得新徽章。