Skip to content

Commit 3f7ac80

Browse files
committed
week2 praksi lahendused
1 parent b6ae4e3 commit 3f7ac80

3 files changed

Lines changed: 110 additions & 0 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package week2.intro;
2+
3+
import java.io.IOException;
4+
import java.nio.file.Files;
5+
import java.nio.file.Paths;
6+
import java.util.List;
7+
8+
public class RegexExercise {
9+
10+
// sõnad "kalad" või "jalad".
11+
public static final String RE1 = "[kj]alad";
12+
13+
// Viietähelised sõned, mis lõppevad tähtedega "alad".
14+
public static final String RE2 = ".alad"; // sõnad täpsemalt: \b\walad\b
15+
16+
// color ja colour
17+
public static final String RE3 = "colou?r";
18+
19+
// jaha, jahaaaaaaaaa!
20+
public static final String RE4 = "ja+ha+";
21+
22+
// binaarsõned
23+
public static final String RE5 = "^[01]*$";
24+
25+
// eelviimane täht on "a"
26+
public static final String RE6 = "^[ab]*a[ab]$";
27+
28+
// tagasiviited
29+
public static final String RE7 = "^(..)\\1$";
30+
31+
// nimede asendamine: regulaaravaldis
32+
public static final String RE8 = "^(\\w*) (\\w*)$";
33+
// millega asendada? (Util.replace'i teine argument)
34+
public static final String RP8 = "$2, $1";
35+
36+
// Eemaldada sulud!
37+
public static final String RE9 = " \\(.*?\\)";
38+
// Siin asendatakse regexiga sobituvad juppid tühja sõnega.
39+
40+
41+
42+
// Testimise meetod, et saaks natuke debuugida, muidu on ka automaattestid.
43+
44+
static void main() throws IOException {
45+
List<String> strings = Files.readAllLines(Paths.get("inputs", "regex.txt"));
46+
printLines(RegexUtils.grep(RE1, strings));
47+
}
48+
49+
private static void printLines(List<String> strings) {
50+
for (String s : strings) System.out.println(s);
51+
}
52+
53+
}

sols/week2/regexapi/Exercise1.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package week2.regexapi;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.regex.Matcher;
6+
import java.util.regex.Pattern;
7+
8+
public class Exercise1 {
9+
10+
// Kui kasutada rühmad siit: http://www.unicode.org/reports/tr18/#General_Category_Property
11+
// Siis peaks töötama põhimõtteliselt igal pool, et võib testida regex101.com-is ja tõsta siia.
12+
private static final String MAAKOND = "\\p{Lu}\\p{Ll}*\\s*maakond";
13+
private static final String ALEV = "\\p{Lu}\\p{Ll}*\\s*\\p{Ll}*";
14+
private static final String TANAV = "\\p{Lu}\\p{Ll}*\\s*\\p{Ll}*";
15+
private static final String MAJANR = "\\d+";
16+
private static final String TAPSUSTUS = "\\p{Ll}*\\s*\\d+";
17+
18+
private static final String REGEX =
19+
MAAKOND + ", " + ALEV + ", " + TANAV + " " + MAJANR + "(, " + TAPSUSTUS + ")?";
20+
21+
public static List<String> extractAddresses(String text) {
22+
Pattern pattern = Pattern.compile(REGEX);
23+
Matcher matcher = pattern.matcher(text);
24+
List<String> addresses = new ArrayList<>();
25+
while (matcher.find()) {
26+
addresses.add(matcher.group());
27+
}
28+
return addresses;
29+
}
30+
}

sols/week2/regexapi/Exercise2.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package week2.regexapi;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.regex.Matcher;
6+
import java.util.regex.Pattern;
7+
8+
public class Exercise2 {
9+
10+
// Kasutame siin ASCII klassid, aga all lisame Unicode flag.
11+
private static final String VARIABLE = "[\\p{Alpha}_][\\p{Alnum}_]*";
12+
13+
// Anname siis rühmitusele nimi "fnname":
14+
// http://stackoverflow.com/questions/415580/regex-named-groups-in-java
15+
private static final String REGEX =
16+
"def\\s+(?<fnname>"+ VARIABLE +")\\s*\\(\\s*"+ VARIABLE +"\\s*,\\s*"+ VARIABLE +"\\s*\\)\\s*:";
17+
18+
public static List<String> extractFunctions(String text){
19+
List<String> functionNames = new ArrayList<>();
20+
Pattern pattern = Pattern.compile(REGEX, Pattern.UNICODE_CHARACTER_CLASS); // <-- saab eesti tähtedega kergemini
21+
Matcher matcher = pattern.matcher(text);
22+
while (matcher.find()){
23+
functionNames.add(matcher.group("fnname"));
24+
}
25+
return functionNames;
26+
}
27+
}

0 commit comments

Comments
 (0)