I use this regex to split a string at every say 3rd position:
String []thisCombo2 = thisCombo.split("(?<=\\G...)");
where the 3 dots after the G indicates every nth position to split. In this case, the 3 dots indicate every 3 positions. An example:
Input: String st = "123124125134135145234235245" Output: 123 124 125 134 135 145 234 235 245.
My question is, how do i let the user control the number of positions where the string must be split at? In other words, how do I make those 3 dots, n dots controlled by the user?
To split a string by multiple spaces, call the split() method, passing it a regular expression, e.g. str. trim(). split(/\s+/) . The regular expression will split the string on one or more spaces and return an array containing the substrings.
Python split() method is used to split the string into chunks, and it accepts one argument called separator. A separator can be any character or a symbol. If no separators are defined, then it will split the given string and whitespace will be used by default.
Use range() function and slicing notation to split string by a number of characters in Python.
For a big performance improvement, an alternative would be to use substring()
in a loop:
public String[] splitStringEvery(String s, int interval) { int arrayLength = (int) Math.ceil(((s.length() / (double)interval))); String[] result = new String[arrayLength]; int j = 0; int lastIndex = result.length - 1; for (int i = 0; i < lastIndex; i++) { result[i] = s.substring(j, j + interval); j += interval; } //Add the last bit result[lastIndex] = s.substring(j); return result; }
Example:
Input: String st = "1231241251341351452342352456" Output: 123 124 125 134 135 145 234 235 245 6.
It's not as short as stevevls' solution, but it's way more efficient (see below) and I think it would be easier to adjust in the future, of course depending on your situation.
2,000 characters long string - interval is 3.
split("(?<=\\G.{" + count + "})")
performance (in miliseconds):
7, 7, 5, 5, 4, 3, 3, 2, 2, 2
splitStringEvery()
(substring()
) performance (in miliseconds):
2, 0, 0, 0, 0, 1, 0, 1, 0, 0
2,000,000 characters long string - interval is 3.
split()
performance (in miliseconds):
207, 95, 376, 87, 97, 83, 83, 82, 81, 83
splitStringEvery()
performance (in miliseconds):
44, 20, 13, 24, 13, 26, 12, 38, 12, 13
2,000,000 characters long string - interval is 30.
split()
performance (in miliseconds):
103, 61, 41, 55, 43, 44, 49, 47, 47, 45
splitStringEvery()
performance (in miliseconds):
7, 7, 2, 5, 1, 3, 4, 4, 2, 1
Conclusion:
The splitStringEvery()
method is a lot faster (even after the changes in Java 7u6), and it escalates when the intervals become higher.
Ready-to-use Test Code:
pastebin.com/QMPgLbG9
You can use the brace operator to specify the number of times a character must occur:
String []thisCombo2 = thisCombo.split("(?<=\\G.{" + count + "})");
The brace is a handy tool because you can use it to specify either an exact count or ranges.
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