Home > Back-end >  How to convert two dimensional array of string into one of type int?
How to convert two dimensional array of string into one of type int?

Time:02-08

How can I convert a double array of type String to a double array of type 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]] There are m 2 elements of the double array. ex) [a,b],[c,d].....m At this time, I want to receive the result in the data type of int[][], not String.

I was wondering how can I convert from String to int[][].

I tried like below

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

but it give me

4
4
5
2
9
2
...

Best Regards!

CodePudding user response:

You can try the below code if you are trying to convert String to 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);
        }
    }
}

It prints below values as output:

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

CodePudding user response:

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

CodePudding user response:

You have to split String and stored in Integer after that push one by one in new two dimenstional array.

Here down is code:

public static void main(String args[]) {
      String str = "[[445, 292], [585, 331], [612, 223], [205, 532]]";
      int increaseArray = 0;
      int[] arr= Stream.of(str.replaceAll("[\\[\\]\\ ]", "").split(",")).mapToInt(Integer::parseInt).toArray();
      int arrSize = arr.length / 2;
      int[][] newArray = new int[arrSize][2];
        
        
      for(int i = 0; i < arrSize; i  )
      {
          for(int j = 0; j < 2; j  )
          {
              newArray[i][j] = arr[increaseArray];
              increaseArray  ;
          }
      }
      System.out.println(Arrays.deepToString(newArray));
}

Output:

[[445, 292], [585, 331], [612, 223], [205, 532]]

CodePudding user response:

You could parse it manually, as done in other answers, but since you are using spring, you should use the tools it offers you.

Spring uses jackson's ObjectMapper for serialization and deserialization by default. A bean of this type is preconfigured for you, you can autowire it in your controller method and use it. Then the entire parsing is this:

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

And your controller method looks like this:

@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";
}
  •  Tags:  
  • Related