Split a string using String.split()Tag(s): String/Number
The String class has a split() (since 1.4) method that will return a String array.
public class StringSplit { public static void main(String args[]) throws Exception{ String testString = "Real-How-To"; System.out.println (java.util.Arrays.toString(testString.split("-"))); // output : [Real, How, To] } }
split() is based on regex expression, a special attention is needed with some characters which have a special meaning in a regex expression.
For example :
public class StringSplit { public static void main(String args[]) throws Exception{ String testString = "Real.How.To"; // bad System.out.println (java.util.Arrays.toString(testString.split("."))); // output : [] // good System.out.println (java.util.Arrays.toString(testString.split("\\."))); // output : [Real, How, To] } }
public class StringSplit { public static void main(String args[]) throws Exception{ String testString = "Real|How|To"; // bad System.out.println (java.util.Arrays.toString(testString.split("|"))); // output : [, R, e, a, l, |, H, o, w, |, T, o] // good System.out.println (java.util.Arrays.toString(testString.split("\\|"))); // output : [Real, How, To] } }
Consider this example
public class StringSplit { public static void main(String args[]) throws Exception{ String testString = "Real|How|To|||"; System.out.println (java.util.Arrays.toString(testString.split("\\|"))); // output : [Real, How, To] } }
public class StringSplit { public static void main(String args[]) throws Exception{ String testString = "Real|How|To|||"; System.out.println (java.util.Arrays.toString(testString.split("\\|", -1))); // output : [Real, How, To, , , ] } }
String.split() is only available since JDK 1.4.
With previous version, java.util.StringTokeniser can be used.
See this HowTo
Some notes from A. Gonzales about String.split()
Special cases using String.split():
public class StringSplit { public static void main(String args[]) throws Exception{ System.out.println (java.util.Arrays.toString(" s".split(" "))); // output : [, , s] System.out.println (java.util.Arrays.toString("".split(""))); // output : [] System.out.println (java.util.Arrays.toString(" ".split(" "))); // output : [] System.out.println (java.util.Arrays.toString(" ".split(" "))); // output : [] System.out.println (java.util.Arrays.toString(" s ".split(" "))); // output : [, s] } }
It's important to note that an invocation like:
param = req.getParam(...); String[] words = param.split(" "); String firstWord = words[0];
Using split() with a space can be a problem. Consider the following :
public class StringSplit { public static void main(String args[]) throws Exception{ String testString = "Real How To"; // extra space System.out.println (java.util.Arrays.toString(testString.split(" "))); // output : [Real, , How, To] } }
public class StringSplit { public static void main(String args[]) throws Exception{ String testString = "Real How To"; System.out.println (java.util.Arrays.toString(testString.split("\\s+"))); // output : [Real, How, To] } }
Since String.split() is based on regular expression, you can make some complex operations with a simple call!
String testString = "{RealHowto}{java-0438.html}{usage of String.split()}"; System.out.println (java.util.Arrays.toString(testString.split("[{}]"))); // output : [, RealHowto, , java-0438.html, , usage of String.split()] // note : extra empty elements :-(
To split a long string into into fixed-length parts. In this example, we split in groups of 3 characters :
String testString = "012345678901234567890"; System.out.println (java.util.Arrays.toString(testString.split("(?<=\\G.{3})"))); // output : [012, 345, 678, 901, 234, 567, 890]
To split but keep the separator :
String testString = "RealHowto!java-0438.html!usage of String.split()!"; System.out.println (java.util.Arrays.toString(testString.split("(?<=[!])"))); // output : [RealHowto!, java-0438.html!, usage of String.split()!]