如何将二维字符串数组转换为整型数组?

3

我该如何将类型为String的双精度数组转换为类型为int的双精度数组?

    @PostMapping("/hole/coordinate")
    @ResponseBody
    public String saveCoordinate(@RequestBody Map<String, Object> params) {
        System.out.println("params = " + params);
        System.out.println("params = " + params.get("coordinate"));
        
        return "success";
    }

System.out.println(params.get("coordinate")); store [[445, 292], [585, 331], [612, 223], [205, 532]] 这是一个由m个二元素的双重数组组成的字符型数据。 例如)[a,b],[c,d].....m

此时,我想要将结果以int[][]类型接收,而不是String。
请问如何将String类型转换为int[][]呢?
我已经尝试了以下代码:

int[] arr= Stream.of(str.replaceAll("[\\[\\]\\, ]", "").split("")).mapToInt(Integer::parseInt).toArray();
for (int i : arr) {
    System.out.println("i = " + i);
}

但它给了我

4
4
5
2
9
2
...

最好的问候!


str里面是什么? - Faheem azaz Bhanej
String str = String.valueOf(params.get("coordinate")); 将参数中的"coordinate"转换为字符串类型并赋值给变量str。 - user18149401
str 是 [[445, 292], [585, 331], [612, 223], [205, 532]] - user18149401
随机地[[25, 549],[14,6634],[252,745],[644,653],[random,random] * random]] - user18149401
你不能“改变”一个数组,你必须创建一个新的,正确类型和维度的数组,并解析每个元素。 - Stultuske
3个回答

2
你可以像其他答案中所做的那样手动解析它,但由于你正在使用spring,所以应该使用它提供的工具。

Spring默认使用jackson的ObjectMapper进行序列化和反序列化。这种类型的bean已经为您预配置好了,您可以在控制器方法中自动装配它并使用它。然后整个解析过程就是这样的:

int[][] parsedCoordinates = objectMapper.readValue(coordinates, int[][].class);

你的控制器方法应该像这样:

@PostMapping("/hole/coordinate")
@ResponseBody
public String saveCoordinate(@RequestBody Map<String, Object> params, ObjectMapper objectMapper) {
    System.out.println("params = " + params);
    System.out.println("params = " + params.get("coordinate"));
    //get string from your params
    String coordinates = "[[445, 292], [585, 331], [612, 223], [205, 532]]";
    int[][] parsedCoordinates;
    try {
        parsedCoordinates = objectMapper.readValue(coordinates, int[][].class);
    } catch (JsonProcessingException exc) {
        //that's a bad way to handle error, but it's an example
        //you might return error message like - invalid coordinate format
        //or whatever you need
        exc.printStackTrace();
        throw new RuntimeException(exc);
    }
    //printing parsed result to check it
    for (int i = 0; i < parsedCoordinates.length; i++) {
        int[] inner = parsedCoordinates[i];
        for (int j = 0; j < inner.length; j++) {
            System.out.printf("pos %d-%d, value %d%n", i, j, parsedCoordinates[i][j]);
        }
    }
    return "success";
}

1
    Try this. It creates a matrix of coordinates.

    String str = "[[445, 292], [585, 331], [612, 223], [205, 532]]";
    List<String> numbers = List.of(str.split(",| |\\[|\\]"));
    List<String> onlyNumbers = numbers.stream()
                                      .filter(number -> !number.equals("") && !number.equals(" "))
                                      .toList();
    Integer[][] coordinates = new Integer[onlyNumbers.size()][2];
    int counter = 0;
    for(int i=0; i < onlyNumbers.size() - 1; i+=2){
        coordinates[counter][0] = Integer.valueOf(onlyNumbers.get(i));
        coordinates[counter][1] = Integer.valueOf(onlyNumbers.get(i+1));
        counter++;
    }

0
如果您想将字符串转换为int[],可以尝试以下代码:
import java.util.stream.*;
public class MyClass {
    public static void main(String args[]) {
      String str = "[[445, 292], [585, 331], [612, 223], [205, 532]]";
      int[] arr= Stream.of(str.replaceAll("[\\[\\]\\ ]", "").split(",")).mapToInt(Integer::parseInt).toArray();
        for (int i : arr) {
            System.out.println("i = " + i);
        }
    }
}

它将以下值作为输出打印:

i = 445
i = 292
i = 585
i = 331
i = 612
i = 223
i = 205
i = 532

OP想要转换成int[][],而不是int[] - Chaosfire
@Chaosfire,我刚刚使用问题中给出的相同示例将其转换为int[]。 这是手动转换为int[][]的第一步。 我喜欢你答案中ObjectMapper的使用。它可以帮我们省去手动执行这些步骤的麻烦。 - Himanshu Jain
这只是让你的答案半成品,它并没有完成所需的操作。另外,我很高兴你喜欢我的解决方案,谢谢。 - Chaosfire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接