java String split 按定长分割
from:http://www.rgagnon.com/javadetails/java-0438.html
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];
will generate a NullPointerException if param.equals(" ").
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] } }
We have an extra element. The fix is to specify a regular expression to match one or more spaces.
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()!] }