Split a string using String.split()Tag(s): String/Number

http://www.rgagnon.com/javadetails/java-0438.html


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 neededwith 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]
  }
}
And
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]
  }
}
The special character needs to be escaped with a "\" but since "\"is also a special character in Java, you need to escape it again with another "\" !
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]
  }
}
The result does not include the empty strings between the "|" separator.To keep the empty strings :
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, , , ]
  }
}
See split(String.int).
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];
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()!]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值