I need to split a string at every i-th and j-th character, where i and j can change according to input parameters. If for example i have an input
String s = "1234567890abcdef";
int i = 2;
int j = 3;
I want my output to be an array of:
[12, 345, 67, 890, ab, cde, f]
I found a compact regex to split at every n-th char. Example for n = 3 using "(?<=\\G...)"
or "(?<=\\G.{3})"
String s = "1234567890abcdef";
int n = 3;
System.out.println(Arrays.toString(s.split("(?<=\\G.{"+n+"})")));
//output: [123, 456, 789, 0ab, cde, f]
How to modify the above regex to split at every 2nd and 3rd char alternately?
A naive chaining like "(?<=\\G.{2})(?<=\\G.{3})"
did not work.
I don't think you can do this with split()
, because every match should be aware of the pattern previously matched.
If you don't want to manually iterate over the string's characters, you can use something like this:
Matcher m = Pattern.compile("(.{0,2})(.{0,3})").matcher("1234567890abcdef");
List<String> list = new ArrayList<>();
while (m.find()) {
for (int i = 1; i <= 2; i++) {
if (!m.group(i).isEmpty()) {
list.add(m.group(i));
}
}
}
System.out.println(list); // prints [12, 345, 67, 890, ab, cde, f]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With