1、String.split()
String有个方法是分割字符串 .split()。但是有写字符串是需要转义才能分割,不然就会出错。
需要转义的字符串:.  $  |   (   )  [   {   ^  ?  *  +  \\      共12个特殊字符,遇到以这些字符进行分割字符串的时候,需要在这些特殊字符前加双反斜杠 \\
例如:
str.split("\\.") 
str.split("\\$") 
str.split("\\|")   
str.split("\\(")   
str.split("\\)")  
str.split("\\[")
str.split("\\{") 
str.split("\\^")   
str.split("\\?")   
str.split("\\*")  
str.split("\\+")
str.split("\\\\")
2、源码:
 
  - 
   
    
   
   
    
     public String[] split(String regex) {
    
   
  
 - 
   
    
   
   
    
             
     return split(regex, 
     0);
    
   
  
 - 
   
    
   
   
    
         } 
    
   
  
 - 
   
    
   
   
    
     public String[] split(String regex, 
     int limit) {
    
   
  
 - 
   
    
   
   
     
     /* fastpath if the regex is a
    
   
  
 - 
   
    
   
   
    
      (1)one-char String and this character is not one of the
    
   
  
 - 
   
    
   
   
    
      RegEx's meta characters ".$|()[{^?*+\\", or
    
   
  
 - 
   
    
   
   
    
      (2)two-char String and the first char is the backslash and
    
   
  
 - 
   
    
   
   
    
      the second is not the ascii digit or ascii letter.
    
   
  
 - 
   
    
   
   
    
      */
    
   
  
 - 
   
    
   
   
     
     char ch = 
     0;
    
   
  
 - 
   
    
   
   
     
     if (((regex.value.length == 
     1 &&
    
   
  
 - 
   
    
   
   
     
      ".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) ||
    
   
  
 - 
   
    
   
   
    
      (regex.length() == 
     2 &&
    
   
  
 - 
   
    
   
   
    
      regex.charAt(
     0) == 
     '\\' &&
    
   
  
 - 
   
    
   
   
    
      (((ch = regex.charAt(
     1))-
     '0')|(
     '9'-ch)) < 
     0 &&
    
   
  
 - 
   
    
   
   
    
      ((ch-
     'a')|(
     'z'-ch)) < 
     0 &&
    
   
  
 - 
   
    
   
   
    
      ((ch-
     'A')|(
     'Z'-ch)) < 
     0)) &&
    
   
  
 - 
   
    
   
   
    
      (ch < Character.MIN_HIGH_SURROGATE ||
    
   
  
 - 
   
    
   
   
    
      ch > Character.MAX_LOW_SURROGATE))
    
   
  
 - 
   
    
   
   
    
      {
    
   
  
 - 
   
    
   
   
     
     int off = 
     0;
    
   
  
 - 
   
    
   
   
     
     int next = 
     0;
    
   
  
 - 
   
    
   
   
     
     boolean limited = limit > 
     0;
    
   
  
 - 
   
    
   
   
    
      ArrayList<String> list = 
     new ArrayList<>();
    
   
  
 - 
   
    
   
   
     
     while ((next = indexOf(ch, off)) != -
     1) {
    
   
  
 - 
   
    
   
   
     
     if (!limited || list.size() < limit - 
     1) {
    
   
  
 - 
   
    
   
   
    
      list.add(substring(off, next));
    
   
  
 - 
   
    
   
   
    
      off = next + 
     1;
    
   
  
 - 
   
    
   
   
    
      } 
     else { 
     // last one
    
   
  
 - 
   
    
   
   
     
     //assert (list.size() == limit - 1);
    
   
  
 - 
   
    
   
   
    
      list.add(substring(off, value.length));
    
   
  
 - 
   
    
   
   
    
      off = value.length;
    
   
  
 - 
   
    
   
   
     
     break;
    
   
  
 - 
   
    
   
   
    
      }
    
   
  
 - 
   
    
   
   
    
      }
    
   
  
 - 
   
    
   
   
     
     // If no match was found, return this
    
   
  
 - 
   
    
   
   
     
     if (off == 
     0)
    
   
  
 - 
   
    
   
   
     
     return 
     new String[]{
     this};
    
   
  
 - 
   
    
   
   
     
    
   
  
 - 
   
    
   
   
     
     // Add remaining segment
    
   
  
 - 
   
    
   
   
     
     if (!limited || list.size() < limit)
    
   
  
 - 
   
    
   
   
    
      list.add(substring(off, value.length));
    
   
  
 - 
   
    
   
   
     
    
   
  
 - 
   
    
   
   
     
     // Construct result
    
   
  
 - 
   
    
   
   
     
     int resultSize = list.size();
    
   
  
 - 
   
    
   
   
     
     if (limit == 
     0)
    
   
  
 - 
   
    
   
   
     
     while (resultSize > 
     0 && list.get(resultSize - 
     1).length() == 
     0)
    
   
  
 - 
   
    
   
   
    
      resultSize--;
    
   
  
 - 
   
    
   
   
    
      String[] result = 
     new String[resultSize];
    
   
  
 - 
   
    
   
   
     
     return list.subList(
     0, resultSize).toArray(result);
    
   
  
 - 
   
    
   
   
    
      }
    
   
  
 - 
   
    
   
   
     
     return Pattern.compile(regex).split(
     this, limit);
    
   
  
 - 
   
    
   
   
    
      }
    
   
 
 
  
京公网安备 11010502036488号