1 package de.uni_hamburg.eggink.autojar; 2 3 import java.util.*; 4 5 class Utils 6 { 7 static boolean patternMatches(String pattern, String name) 8 { 9 if (pattern == null) 10 return true; 11 12 int iExpr = 0, 13 iPath = 0, 14 lenPattern = pattern.length(), 15 lenName = name.length(); 16 boolean ok = false; 17 18 loop: 19 while (iExpr < lenPattern) 20 { 21 char charExpr = pattern.charAt(iExpr); 22 23 switch (charExpr) 24 { 25 case '?': 26 { 27 29 if (iPath >= lenName) 30 break loop; 31 32 ++iExpr; 33 ++iPath; 34 break; 35 } 36 37 case '*': 38 { 39 41 int nqu = 0; 42 43 45 while (++iExpr < lenPattern) 46 { 47 char c = pattern.charAt(iExpr); 48 49 if (c == '?') 50 ++nqu; 51 else if (c != '*') 52 break; 53 } 54 55 if (iExpr >= lenPattern) 56 { 57 59 ok = lenName - iPath >= nqu; 60 break loop; 61 } 62 else 63 { 64 66 int jex = iExpr; 67 68 while (++jex < lenPattern) 69 { 70 char c = pattern.charAt(jex); 71 72 if (c == '*' || c == '?') 73 break; 74 } 75 76 String normal = pattern.substring(iExpr, jex); 77 int ifound = name.indexOf(normal, iPath); 78 79 if (ifound < 0 || ifound - iPath < nqu) 80 { 81 83 break loop; 84 } 85 86 88 iPath = ifound + normal.length(); 89 iExpr = jex; 90 91 break; 92 } 93 } 94 95 default: 96 { 97 99 if (iPath >= lenName || charExpr != name.charAt(iPath)) 100 break loop; 101 102 ++iExpr; 103 ++iPath; 104 } 105 } 106 } 107 108 if (! ok) 109 ok = iPath == lenName; 110 111 return ok; 112 113 } 114 115 117 static boolean patternMatches(ArrayList patterns, String name) 118 { 119 if (patterns == null) 120 return false; 121 122 for (Iterator it = patterns.iterator(); it.hasNext(); ) 123 { 124 String pat = (String )it.next(); 125 126 if (patternMatches(pat, name)) 127 return true; 128 } 129 130 return false; 131 } 132 133 } 134 135 | Popular Tags |