1 package com.quadcap.util.text; 2 3 40 41 import java.util.ArrayList ; 42 43 49 public class Text { 50 57 58 public static String [] extractN(String s, String p) { 59 return extractN(s, p, '*'); 60 } 61 62 public static String [] extractMatching(String s, 63 String [] p, 64 char d) { 65 String [] ret = null; 68 int i; 69 for (i = 0; i < p.length; i++) { 70 ret = extractN(s, p[i], d); 71 if (ret != null) { 72 break; 73 } 74 } 75 if (ret != null) { 76 String [] nret = new String [ret.length + 1]; 77 System.arraycopy(ret, 0, nret, 0, ret.length); 78 nret[ret.length] = String.valueOf(i); 79 ret = nret; 80 } 81 return ret; 82 } 83 84 public static String [] extractN(String s, String p, char d) { 85 if (p == null || p.length() == 0) p = "" + d; 86 if (p.charAt(0) != d) p = "" + d + p; 87 if (p.charAt(p.length()-1) != d) p = p + d; 88 89 int cnt = 0; 91 StringBuffer sb = new StringBuffer (); 92 ArrayList list = new ArrayList (); 93 for (int i = 0; i < p.length(); i++) { 94 char c = p.charAt(i); 95 if (c == d) { 96 cnt++; 97 list.add(sb.toString()); 98 sb.setLength(0); 100 } else { 101 sb.append(c); 102 } 103 } 104 list.add(sb.toString()); 105 if (cnt < list.size()) cnt = list.size(); 106 String [] lits = new String [cnt]; 107 for (int i = 0; i < cnt; i++) { 108 lits[i] = list.get(i).toString(); 109 } 110 String [] ret = new String [cnt-1]; 111 int[] ixs = new int[cnt]; 112 int lev = 0; 113 int rlev = 0; 114 for (int i = 0; lev >= 0 && lev < cnt; i++) { 115 int pre = ixs[lev]; 116 final int len = lits[lev].length(); 117 int idx = len == 0 ? pre : s.indexOf(lits[lev], pre); 118 if (idx < 0) { 119 lev--; 120 } else { 121 if (len == 0) { 122 ++lev; 123 if (i == 0) { if (lev < cnt) { 125 rlev--; 126 ixs[lev] = idx; 127 } 128 } else if (lev == 1) { 129 lev = -1; 130 } else { 131 ret[lev + rlev - 1] = s.substring(idx); 132 } 133 } else { 134 ret[lev + rlev] = s.substring(pre, idx); 135 ixs[lev] = idx + len; 136 if (++lev < cnt) { 137 ixs[lev] = idx + len; 138 } 139 } 140 } 141 } 142 return lev < cnt ? null : ret; 151 } 152 153 161 public static String extract(String s, String p, int n) { 162 return extract(s, p, n, '*'); 163 } 164 165 public static String extract(String s, String p, int n, char d) { 166 String [] ret = extractN(s, p, d); 167 if (ret == null) { 168 return s; 169 } else { 170 return ret[n]; 171 } 172 } 173 174 } 175 | Popular Tags |