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