我正在尝试将字符串转换为整数数组,以便我可以对它们执行数学运算。我遇到以下代码问题:
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转换有关吗?
答案 0 :(得分:11)
您的解决方案存在许多问题。第一个是循环条件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);
}
答案 1 :(得分:5)
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));
第二种解决方案可能效率很低,因为它使用正则表达式并为每个数字创建字符串实例。
答案 2 :(得分:3)
每个人都已正确识别代码中的无效广告。你根本不需要那个演员: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));
答案 3 :(得分:2)
这一行:
num[i] = (int[])list[i];
应该是:
num[i] = (int)list[i];
答案 4 :(得分:2)
您不应该将每个元素转换为整数数组int[]
,而应转换为整数int
:
for (int i = 0; i > raw.length(); i++)
{
num[i] = (int)list[i];
}
System.out.println(num);
答案 5 :(得分:1)
您无法将list[i]
投射到int[]
,而是投放到int
。数组的每个索引只是一个int,而不是一个int数组。
所以应该只是
num[i] = (int)list[i];
答案 6 :(得分:1)
供将来参考。即使使用强制转换,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));
答案 7 :(得分:0)
这个课程在这里:http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html应该让你出局。它可以从字符串中解析整数。它比使用数组容易一些。
答案 8 :(得分:0)
每个人都对转换问题是正确的。看起来你实际上尝试了正确的版本,但输出是带标签的。这是因为system.out.println(num)
在这种情况下不能达到您想要的效果:)请改用system.out.println(java.util.Arrays.toString(num))
,并查看this thread了解更多详情。
答案 9 :(得分:0)
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;
}
答案 10 :(得分:0)
您可以尝试这样
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);
}
答案 11 :(得分:0)
简单而现代的解决方案
int[] result = new int[raw.length()];
Arrays.setAll(result, i -> Character.getNumericValue(raw.charAt(i)));