13

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

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转换有关吗?

4

12 回答 12

14

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

二是演员阵容。您正在尝试转换为整数数组。事实上,由于结果是 char 你不必强制转换为 int - 转换将自动完成。但转换后的数字并不是你想象的那样。它不是您期望的整数值,但实际上是字符的 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);
    }
于 2012-06-04T18:24:28.467 回答
12

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));

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

于 2015-06-05T19:32:05.643 回答
4

每个人都正确识别了代码中的无效转换。您根本不需要该转换: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));
于 2012-06-04T18:18:36.393 回答
3

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

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

System.out.println(num);
于 2012-06-04T18:16:57.660 回答
2

这一行:

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

应该:

num[i] = (int)list[i];
于 2012-06-04T18:15:55.507 回答
1

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

所以应该只是

num[i] = (int)list[i];
于 2012-06-04T18:17:31.123 回答
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));
于 2013-03-19T20:29:48.770 回答
0

此处的此类:http: //docs.oracle.com/javase/7/docs/api/java/lang/Integer.html应该可以帮助您。它可以解析字符串中的整数。这比使用数组要容易一些。

于 2012-06-04T18:16:16.290 回答
0

关于转换问题,每个人都是正确的。看起来您实际上尝试了正确的版本,但输出是乱码。这是因为system.out.println(num)在这种情况下不会做你想做的事:)system.out.println(java.util.Arrays.toString(num))改为使用,并查看这个线程以获取更多详细信息。

于 2012-06-04T18:23:16.453 回答
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;
} 
于 2015-12-23T21:13:06.640 回答
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);
}
于 2018-09-11T05:45:25.277 回答
0

简单而现代的解决方案

int[] result = new int[raw.length()]; 
Arrays.setAll(result, i -> Character.getNumericValue(raw.charAt(i))); 
于 2021-06-29T11:17:27.173 回答