|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This report was generated with an evaluation server license. Purchase Clover or configure your license. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WildChars | Line # 8 | 25 | 16 | 100% |
1.0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
(3) | |||
Result | |||
0.8367347
|
alitest.WildCharsTest.testWildmat88
![]() |
1 PASS | |
0.5102041
|
alitest.WildCharsTest.testOnkoSamat123
![]() |
1 PASS | |
0.12244898
|
alitest.WildCharsTest.testContainsWildChars15
![]() |
1 PASS | |
1 | package fi.jyu.mit.ohj2; | |
2 | ||
3 | /** | |
4 | * Luokka wildmat-vertailuun, jossa jokereita ovat * ja ? | |
5 | * @author Vesa Lappalainen, Markku Vire | |
6 | * @version 1.0, 23.03.2002 | |
7 | */ | |
8 | public class WildChars { // NOPMD | |
9 | ||
10 | /** | |
11 | * Palauttaa sisältääkö jono str jokerimekrkkejä * tai ? | |
12 | * @param str jono jota tutkitaan | |
13 | * @return sisältääkö jono (true) jokerimerkkejä vai ei (false) | |
14 | * @example | |
15 | * <pre name="test"> | |
16 | * containsWildChars(null) === false; | |
17 | * containsWildChars("*") === true; | |
18 | * containsWildChars("?") === true; | |
19 | * containsWildChars("a*b?c") === true; | |
20 | * </pre> | |
21 | */ | |
22 | 4 |
![]() |
23 | { | |
24 | 4 | if (str == null) return false; |
25 | 3 | return (str.indexOf('*') >= 0 || str.indexOf('?') >= 0); |
26 | } | |
27 | ||
28 | /** | |
29 | * Apumetodi wildmat-aliohjelman toteuttamiseksi | |
30 | * @param str tutkittava jono | |
31 | * @param mask maski johon verrataan | |
32 | * @param si indeksi jonossa, josta aloitetaan vertailu | |
33 | * @param mi indeksi maskissa, josta aloitetaan vertailu | |
34 | * @return ovatko samat (true) vai ei (false) jokeri-mielessä | |
35 | * @example | |
36 | */ | |
37 | 43 |
![]() |
38 | 43 | if ( str == null || mask == null ) return ( str == null && mask == null ); |
39 | ||
40 | 90 | while ( mi < mask.length() ) { |
41 | 84 | char m = mask.charAt(mi); |
42 | ||
43 | 84 | if ( m == '?' ) { |
44 | 2 | if (si >= str.length()) return false; |
45 | } | |
46 | 82 | else if ( m == '*' ) { |
47 | 26 | mi++; |
48 | 26 | if ( mi < mask.length() ) |
49 | 20 | while ( !wildmat(str, mask,si,mi) ) { |
50 | 4 | si++; |
51 | 4 | if ( si >= str.length() ) return false; |
52 | } | |
53 | 25 | return true; |
54 | } | |
55 | 56 | else if ( ( si >= str.length() ) || ( m != str.charAt(si) ) ) |
56 | 7 | return false; |
57 | ||
58 | 50 | si++; mi++; |
59 | } | |
60 | ||
61 | 6 | return ( si == str.length() ); |
62 | } | |
63 | ||
64 | /** | |
65 | *<pre> | |
66 | * Funktiolla tutkitaan täsmääkö annettu jono verrattavaan maskiin. | |
67 | * Maski saa sisältää seuraavia erikoismerkkejä: | |
68 | * * vastaa 0-n merkkiä | |
69 | * ? vastaa mitä tahansa yhtä merkkiä | |
70 | * | |
71 | * Algoritmi: Kysymysmerkki ja tavallinen kirjain normaalisti | |
72 | * Jos tulee vastaan tähti joka ei ole jonon lopussa, | |
73 | * niin ongelmahan on oikeastaan | |
74 | * (koska tähän asti kaikki on ollut oikein) | |
75 | * "Onko loppujono sama kuin toisen jonon loppu JOSTAKIN | |
76 | * kohdasta alkaen"? | |
77 | * Siis kokeillaan sovittaa loppujonoa aliohjelman itsensä | |
78 | * (rekursio) avulla kaikkiin mahdollisiin loppupaikkoihin. | |
79 | * Esimerkki: str = "Kissa" maski = "*ss*" -> true | |
80 | * = "*ss" -> false | |
81 | * </pre> | |
82 | * | |
83 | * @param str jono jota tutkitaan | |
84 | * @param mask maski johon verrataan | |
85 | * @return onko samat (true) vai ei (false) maskin mielessä. | |
86 | * | |
87 | * @example | |
88 | * <pre name="test"> | |
89 | * wildmat("kissa","kissa") === true; | |
90 | * wildmat("kissa","kiss*") === true; | |
91 | * wildmat("kissa","kss*") === false; | |
92 | * wildmat("kissa","k*ss*") === true; | |
93 | * wildmat("kissa","k***********ss*") === true; | |
94 | * wildmat("kissa","*iss*") === true; | |
95 | * wildmat("kissa","*kiss*") === true; | |
96 | * wildmat("kissa","*kissa*") === true; | |
97 | * wildmat("kissa","*k?ss*") === true; | |
98 | * wildmat("kissa","kass*") === false; | |
99 | * wildmat("","*a") === false; | |
100 | * wildmat("","*") === true; | |
101 | * wildmat("","") === true; | |
102 | * wildmat("a","") === false; | |
103 | * wildmat("kissa","KISSA") === false; | |
104 | * wildmat("k","k?") === false; | |
105 | * wildmat(null,null) === true; | |
106 | * wildmat("",null) === false; | |
107 | * wildmat(null,"") === false; | |
108 | * | |
109 | * </pre> | |
110 | */ | |
111 | 23 |
![]() |
112 | 23 | return wildmat(str,mask,0,0); |
113 | } | |
114 | ||
115 | /** | |
116 | * Testaa ovatko kaksi merkkijonoa samat maskin mielessä | |
117 | * jos ne muutetaan isoille kirjaimille. | |
118 | * @param str tutkittava jono | |
119 | * @param mask maski | |
120 | * @return true jos samat | |
121 | * | |
122 | * @example | |
123 | * <pre name="test"> | |
124 | * onkoSamat("kissa","KISSA") === true; | |
125 | * onkoSamat("KISSA","kissa") === true; | |
126 | * onkoSamat("kissa","kiss") === false; | |
127 | * onkoSamat("KISSA","ki*") === true; | |
128 | * | |
129 | * </pre> | |
130 | */ | |
131 | 4 |
![]() |
132 | 4 | return wildmat(str.toUpperCase(),mask.toUpperCase()); // NOPMD |
133 | } | |
134 | ||
135 | /* | |
136 | static int wilderr = 0; | |
137 | ||
138 | private static void wildtest(String s, String maski, boolean result) { | |
139 | boolean ret = onkoSamat(s,maski); | |
140 | System.out.print("\"" + s + "\" \"" + maski + "\" => " + ret); | |
141 | if ( ret != result ) { | |
142 | System.out.print(" VÄÄRIN!"); | |
143 | wilderr++; | |
144 | } | |
145 | System.out.println(); | |
146 | } | |
147 | ||
148 | public static void main(String[] args) { | |
149 | wildtest("kissa","kissa",true); | |
150 | wildtest("kissa","kiss*",true); | |
151 | wildtest("kissa","kss*",false); | |
152 | wildtest("kissa","k*ss*",true); | |
153 | wildtest("kissa","k***********ss*",true); | |
154 | wildtest("kissa","*iss*",true); | |
155 | wildtest("kissa","*kiss*",true); | |
156 | wildtest("kissa","*kissa*",true); | |
157 | wildtest("kissa","*k?ss*",true); | |
158 | wildtest("kissa","kass*",false); | |
159 | wildtest("","*a",false); | |
160 | wildtest("","*",true); | |
161 | wildtest("","",true); | |
162 | wildtest("a","",false); | |
163 | wildtest("kissa","KISSA",true); | |
164 | if ( wilderr == 0 ) System.out.println("Kaikki oikein :-)"); | |
165 | else System.out.println(" VIRHEITÄ: " + wilderr); | |
166 | } | |
167 | */ | |
168 | } |
|