Commit 24851685 by Patryk Czarnik

PoliczWszystkieSlowa - wiele wersji

parent 7648ffec
package p13_pliki.tadeusz;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/* Program dla każdego słowa występującego w pliku oblicza, ile razy ono występuje.
* Program powinien bez powtórzeń wypisać każde słowo i jego liczbę wystąpień.
*
* Dodatkowe urozmaicenia - można wyniki posortować alfabetycznie wg słów albo wg liczby wystąpień,
* można ignorować wielkość liter.
*/
public class PoliczWszystkieSlowa1 {
public static void main(String[] args) {
Map<String, Integer> slownik = new HashMap<>();
try(Scanner scanner = new Scanner(new File("pan_tadeusz.txt"))) {
scanner.useDelimiter("[^\\p{L}\\d]+");
while(scanner.hasNext()) {
String slowo = scanner.next();
if(slownik.containsKey(slowo)) {
// słowo już wcześniej występowało - trzeba zwiększyć liczbę wystąpień zapisaną w słowniku
int ileBylo = slownik.get(slowo);
slownik.put(slowo, ileBylo+1);
} else {
// słowo widzimy po raz pierwszy - trzeba wstawić do słownika z wartością 1
slownik.put(slowo, 1);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// System.out.println(slownik);
for(Map.Entry<String, Integer> entry : slownik.entrySet()) {
System.out.printf("%-20s → %4d%n", entry.getKey(), entry.getValue());
}
}
}
package p13_pliki.tadeusz;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class PoliczWszystkieSlowa2 {
public static void main(String[] args) {
Map<String, Integer> slownik = new HashMap<>();
System.out.println("Liczenie słów");
try(Scanner scanner = new Scanner(new File("pan_tadeusz.txt"))) {
scanner.useDelimiter("[^\\p{L}\\d]+");
while(scanner.hasNext()) {
String slowo = scanner.next();
// od Java 8 istnieje operacja getOrDefault, której można użyć i dzięki temu nie pisać ifa
int ileBylo = slownik.getOrDefault(slowo, 0);
slownik.put(slowo, ileBylo+1);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("Sortowanie");
// sortowanie wyników wg wartości - pobieramy listę wpisów i sortujemy wg wartości, a po drugie wg kluczy
List<Map.Entry<String, Integer>> lista = new ArrayList<>(slownik.entrySet());
lista.sort(Map.Entry.comparingByValue());
System.out.println("Wypisywaie wyników:");
for(Map.Entry<String, Integer> entry : lista) {
System.out.printf("%-20s → %4d%n", entry.getKey(), entry.getValue());
}
}
}
package p13_pliki.tadeusz;
import java.io.File;
import java.io.FileNotFoundException;
import java.text.Collator;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class PoliczWszystkieSlowa3 {
public static void main(String[] args) {
System.out.println("Startujemy");
// kolejność wg kluczy alfabetycznie
Map<String, Integer> slownik = new TreeMap<>(Collator.getInstance());
try(Scanner scanner = new Scanner(new File("pan_tadeusz.txt"))) {
scanner.useDelimiter("[^\\p{L}\\d]+");
while(scanner.hasNext()) {
String slowo = scanner.next();
// od Java 8 istnieje operacja merge, która służy dokładnie do realizacji takich schematów
// podajemy wartość, która ma być wstawiona do słownika, oraz funkcję, która służy "zagregowania" poprzedniej wartości z nową wartością - tutaj jest to matematyczne dodawanie
slownik.merge(slowo, 1, Integer::sum);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
slownik.forEach((slowo, ile) -> {
System.out.printf("%-20s → %4d%n", slowo, ile);
});
}
}
package p13_pliki.tadeusz;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.Collectors;
public class PoliczWszystkieSlowa4 {
public static void main(String[] args) {
try(Scanner scanner = new Scanner(new File("pan_tadeusz.txt"))) {
scanner.useDelimiter("[^\\p{L}\\d]+");
Map<String, Long> slownik = scanner.tokens()
.map(String::toLowerCase)
.collect(Collectors.groupingBy(x -> x, Collectors.counting()));
slownik.forEach((slowo, ile) -> {
System.out.printf("%-20s → %4d%n", slowo, ile);
});
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
package p13_pliki.tadeusz;
import java.io.File;
import java.io.FileNotFoundException;
import java.text.Collator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.Collectors;
public class PoliczWszystkieSlowa5 {
public static void main(String[] args) {
try(Scanner scanner = new Scanner(new File("pan_tadeusz.txt"))) {
scanner.useDelimiter("[^\\p{L}\\d]+");
scanner.tokens()
.map(String::toLowerCase)
.collect(Collectors.groupingBy(x -> x, Collectors.counting()))
.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey(Collator.getInstance()))
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Long::sum, LinkedHashMap::new))
.forEach((slowo, ile) -> {
System.out.printf("%-20s → %4d%n", slowo, ile);
});
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment