For my project I have to read various input graphs. Unfortunately, the input edges have not the same format. Some of them are comma-separated, others are tab-separated, etc. For example:
File 1:
JavaScript
x
123,45
67,89
File 2
JavaScript
123 45
67 89
Rather than handling each case separately, I would like to automatically detect the split characters. Currently I have developed the following solution:
JavaScript
String str = "123,45";
String splitChars = "";
for(int i=0; i < str.length(); i++) {
if(!Character.isDigit(str.charAt(i))) {
splitChars += str.charAt(i);
}
}
String[] endpoints = str.split(splitChars);
Basically I pick the first row and select all the non-numeric characters, then I use the generated substring as split characters. Is there a cleaner way to perform this?
Advertisement
Answer
Split the string on \D+
which means one or more non-digit characters.
Demo:
JavaScript
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Test strings
String[] arr = { "123,45", "67,89", "125 89", "678 129" };
for (String s : arr) {
System.out.println(Arrays.toString(s.split("\D+")));
}
}
}
Output:
JavaScript
[123, 45]
[67, 89]
[125, 89]
[678, 129]