char数组到int数组

我正在尝试将字符串转换为整数数组,以便我可以对它们执行数学运算。 我遇到以下代码问题:

String raw = "1233983543587325318"; char[] list = new char[raw.length()]; list = raw.toCharArray(); int[] num = new int[raw.length()]; for (int i = 0; i < raw.length(); i++){ num[i] = (int[])list[i]; } System.out.println(num); 

这给了我一个“不可转换的类型”错误,需要:int [] found:char我还尝试了一些其他的方法,比如Character.getNumericValue,只是直接分配它,没有任何修改。 在这些情况下,它总是输出相同的垃圾“[I @ 41ed8741”,无论我使用什么转换方法或(!)字符串的实际值是什么。 它与unicode转换有关吗?

您的解决方案存在许多问题。 第一个是循环条件i > raw.length()是错误的 – 你的循环永远不会被执行 – 条件应该是i < raw.length()

第二个是演员。 您正在尝试强制转换为整数数组。 实际上,因为结果是char,所以不必转换为int - 转换将自动完成。 但转换的数字并不是你想象的那样。 它不是您期望的整数值,但实际上是char的ASCII值。 因此,您需要减去ASCII值为零以获得您期望的整数值。

第三个是你如何尝试打印结果整数数组。 您需要循环遍历数组的每个元素并将其打印出来。

  String raw = "1233983543587325318"; int[] num = new int[raw.length()]; for (int i = 0; i < raw.length(); i++){ num[i] = raw.charAt(i) - '0'; } for (int i : num) { System.out.println(i); } 

Java 8中的两种方式:

 String raw = "1233983543587325318"; final int[] ints1 = raw.chars() .map(x -> x - '0') .toArray(); System.out.println(Arrays.toString(ints1)); final int[] ints2 = Stream.of(raw.split("")) .mapToInt(Integer::parseInt) .toArray(); System.out.println(Arrays.toString(ints2)); 

第二种解决方案可能效率很低,因为它使用正则表达式并为每个数字创建字符串实例。

每个人都已正确识别代码中的无效强制转换。 您根本不需要该转换:Java将隐式地将char转换为int

 String raw = "1233983543587325318"; char[] list = raw.toCharArray(); int[] num = new int[raw.length()]; for (int i = 0; i < raw.length(); i++) { num[i] = Character.digit(list[i], 10); } System.out.println(Arrays.toString(num)); 

这一行:

 num[i] = (int[])list[i]; 

应该:

 num[i] = (int)list[i]; 

您不应该将每个元素转换为整数数组int[]而是转换为整数int

 for (int i = 0; i > raw.length(); i++) { num[i] = (int)list[i]; } System.out.println(num); 

你不能将list[i] int[]int[] ,而是转换为int 。 数组的每个索引只是一个int,而不是一个int数组。

所以它应该是公正的

 num[i] = (int)list[i]; 

供将来参考。 即使使用强制转换,char到int转换也不是隐式的。 你必须这样做:

  String raw = "1233983543587325318"; char[] list = raw.toCharArray(); int[] num = new int[list.length]; for (int i = 0; i < list.length; i++){ num[i] = list[i] - '0'; } System.out.println(Arrays.toString(num)); 

这个类在这里: http : //docs.oracle.com/javase/7/docs/api/java/lang/Integer.html应该解雇你。 它可以从字符串中解析整数。 它比使用数组容易一些。

每个人都对转换问题是正确的。 看起来你实际上尝试了正确的版本,但输出是带标签的。 这是因为system.out.println(num)在这种情况下没有按照你想要的那样做:)改为使用system.out.println(java.util.Arrays.toString(num)) ,并查看此线程更多细节。

 String raw = "1233983543587325318"; char[] c = raw.toCharArray(); int[] a = new int[raw.length()]; for (int i = 0; i < raw.length(); i++) { a[i] = (int)c[i] - 48; } 

你可以这样试试,

 String raw = "1233983543587325318"; char[] list = new char[raw.length()]; list = raw.toCharArray(); int[] num = new int[raw.length()]; for (int i = 0; i < raw.length(); i++) { num[i] = Integer.parseInt(String.valueOf(list[i])); } for (int i: num) { System.out.print(i); }