天天看點

字元串截取,引号内容不截取算法。

String str = "a,b,c,\"$1,563\",\"$2,445\",d";

我要把這個字元串截取成

a

b

c

$1,563

$2,445

d

//過程式代碼

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test {
 public static void main(String[] args) throws Exception {
  String str = "a,b,c,\"$1,563\",\"$2,445\",d";

  List result = split(str);
  for (Iterator iter = result.iterator(); iter.hasNext();) {
   System.out.println(iter.next());
  }
 }

 public static List split(String str) throws Exception {
  List result = new ArrayList();

  if (str != null && str.length() > 0) {
   int start = 0;
   for (int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);
    if (c == ',') {
     result.add(str.substring(start, i));
     if (str.charAt(i + 1) != '\"') {
      start = i + 1;
     } else {
      start = i + 2;
     }
    } else if (c == '\"') {
     int end = str.indexOf("\"", start);
     if (end == -1) {
      throw new Exception("引号不比對!");
     } else {
      result.add(str.substring(start, end));
      if (end < str.length() && str.charAt(end + 2) != '\"') {
       start = end + 2;
      } else {
       start = end + 3;
      }
      i = end + 1;
     }
    }

    //加上末尾字元串
    if (i == str.length() - 1) {
     String string = str.substring(start, str.length());
     if (string.length() > 0) {
      result.add(string);
     }
    }
   }
  }

  return result;
 }
}