1 25 package classycle.util; 26 27 import java.util.StringTokenizer ; 28 29 30 50 public class WildCardPattern implements StringPattern 51 { 52 private static final String WILD_CARD = "*"; 53 54 65 public static StringPattern createFromsPatterns(String patterns, 66 String delimiters) 67 { 68 if (delimiters.indexOf(WILD_CARD) >= 0) 69 { 70 throw new IllegalArgumentException ("No wild card '" + WILD_CARD 71 + "' are allowed as delimiters: " + delimiters); 72 } 73 OrStringPattern result = new OrStringPattern(); 74 StringTokenizer tokenizer = new StringTokenizer (patterns, delimiters); 75 while (tokenizer.hasMoreTokens()) 76 { 77 result.appendPattern(new WildCardPattern(tokenizer.nextToken().trim())); 78 } 79 return result; 80 } 81 82 private final String _pattern; 83 private final String [] _constantParts; 84 private final boolean _startsWithAnything; 85 private final boolean _endsWithAnything; 86 87 92 public WildCardPattern(String pattern) 93 { 94 _pattern = pattern; 95 _startsWithAnything = pattern.startsWith(WILD_CARD); 96 _endsWithAnything = pattern.endsWith(WILD_CARD); 97 StringTokenizer tokenizer = new StringTokenizer (pattern, WILD_CARD); 98 _constantParts = new String [tokenizer.countTokens()]; 99 for (int i = 0; i < _constantParts.length; i++) 100 { 101 _constantParts[i] = tokenizer.nextToken(); 102 } 103 } 104 105 108 public String toString() 109 { 110 return _pattern; 111 } 112 113 116 public boolean matches(String string) 117 { 118 return string == null ? false : matches(string, 0, 0); 119 } 120 121 private boolean matches(String string, int indexInString, 122 int indexInConstantParts) 123 { 124 boolean result = true; 125 if (indexInConstantParts < _constantParts.length) 126 { 127 String constantPart = _constantParts[indexInConstantParts]; 128 do 129 { 130 int index = string.indexOf(constantPart, indexInString); 131 if (index < 0 132 || (indexInString == 0 && !_startsWithAnything && index > 0)) 133 { 134 result = false; 135 break; 136 } 137 indexInString = index + constantPart.length(); 138 result = matches(string, indexInString, indexInConstantParts + 1); 139 } while (result == false); 140 } else 141 { 142 result = result && (_endsWithAnything || indexInString == string.length()); 143 } 144 return result; 145 } 146 } 147
| Popular Tags
|