char数组到int数组

dae*_*lus 7 java

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

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);
Run Code Online (Sandbox Code Playgroud)

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

aus*_*ser 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);
    }
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 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));
Run Code Online (Sandbox Code Playgroud)

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

  • Java 8 中非常简洁的代码的优秀示例!有趣的是,您可以为调用 `raw.split("")` 的正则表达式指定一个空字符串。 (2认同)