1 3 5 22 23 package edu.neu.ccs.jmk; 24 25 34 35 final class Matcher 36 { 37 private final static char wildCard = '%'; 39 40 private String prefix = ""; 41 private String suffix = null; 42 private int prefixLength; 43 private int suffixLength; 44 45 49 Matcher(String pattern) { 50 if (isPatternOkay(pattern)) { 51 suffix = pattern; 52 prefixLength = pattern.indexOf(wildCard); 53 if (prefixLength >= 0) { 54 prefix = pattern.substring(0, prefixLength); 55 suffix = pattern.substring(prefixLength + 1); 56 } 57 else 58 prefixLength = 0; 59 suffixLength = suffix.length(); 60 } 61 } 62 63 68 String match(String string) { 69 if (suffix != null 70 && string.length() >= prefixLength + suffixLength 71 && string.startsWith(prefix) 72 && string.endsWith(suffix)) { 73 string = string.substring(0, string.length() - suffixLength); 74 string = string.substring(prefixLength); 75 return string; 76 } 77 else 78 return null; 79 } 80 81 84 static String subst(String match, String replacement) { 85 if (match == null) 86 return replacement; 87 int i = replacement.indexOf(wildCard); 88 if (i < 0) 89 return replacement; 90 StringBuffer sb = new StringBuffer (); 91 do { 92 sb.append(replacement.substring(0, i)); 93 sb.append(match); 94 replacement = replacement.substring(i + 1); 95 i = replacement.indexOf(wildCard); 96 } 97 while (i >= 0); 98 sb.append(replacement); 99 return sb.toString(); 100 } 101 102 105 static boolean isPattern(String string) { 106 return string.indexOf(wildCard) >= 0; 107 } 108 109 112 static boolean isPatternOkay(String pattern) { 113 int wildCards = 0; 114 for (int i = 0; i < pattern.length(); i++) 115 if (pattern.charAt(i) == wildCard) 116 wildCards++; 117 return wildCards <= 1; 118 } 119 } 120 | Popular Tags |