Commit 06b08a75 by Patryk Czarnik

Przykłady dot. tekstu

parent bf83c600
This source diff could not be displayed because it is too large. You can view the blob instead.
package p19_napisy;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class BudowanieNapisow_PomiarCzasu {
static String kolejneLiczby(int n) {
String napis = "";
for(int i = 1; i <= n; i++) {
napis += i + " ";
}
return napis;
}
static String kolejneLiczbyConcat(int n) {
String napis = "";
for(int i = 1; i <= n; i++) {
napis = napis.concat(i + " ");
}
return napis;
}
static String kolejneLiczbyCollector(int n) {
return IntStream.rangeClosed(1, n)
.mapToObj(Integer::toString)
.collect(Collectors.joining(" "));
}
static String kolejneLiczbySB(int n) {
StringBuilder s = new StringBuilder();
for(int i = 1; i <= n; i++) {
s.append(i).append(' ');
}
return s.toString();
}
public static void main(String[] args) {
// sprawdzanie czasu wykonania
int[] dane1 = {25000, 50000, 100_000};
int[] dane2 = {25000, 50000, 100_000, 1_000_000, 10_000_000};
int[] dane3 = {25000, 50000, 100_000, 1_000_000, 10_000_000, 100_000_000};
System.out.println("Wersja String +=");
System.out.println(kolejneLiczby(10));
for(int n : dane1) {
System.out.println("n = " + n + "...");
long start = System.currentTimeMillis();
String wynik = kolejneLiczby(n);
long koniec = System.currentTimeMillis();
System.out.println(" Dla n = " + n + " trwało " + (koniec - start) + "ms");
System.out.println(" Napis ma długość " + wynik.length());
}
System.out.println();
System.out.println("Wersja String concat");
System.out.println(kolejneLiczbyConcat(10));
for(int n : dane1) {
System.out.println("n = " + n + "...");
long start = System.currentTimeMillis();
// start = System.nanoTime();
String wynik = kolejneLiczbyConcat(n);
long koniec = System.currentTimeMillis();
System.out.println(" Dla n = " + n + " trwało " + (koniec - start) + "ms");
System.out.println(" Napis ma długość " + wynik.length());
}
System.out.println();
System.out.println("Wersja Stream / collector");
System.out.println(kolejneLiczbyCollector(10));
for(int n : dane2) {
System.out.println("n = " + n + "...");
long start = System.currentTimeMillis();
String wynik = kolejneLiczbyCollector(n);
long koniec = System.currentTimeMillis();
System.out.println(" Dla n = " + n + " trwało " + (koniec - start) + "ms");
System.out.println(" Napis ma długość " + wynik.length());
}
System.out.println();
System.out.println("Wersja StringBuilder");
System.out.println(kolejneLiczbySB(10));
for(int n : dane3) {
System.out.println("n = " + n + "...");
long start = System.currentTimeMillis();
String wynik = kolejneLiczbySB(n);
long koniec = System.currentTimeMillis();
System.out.println(" Dla n = " + n + " trwało " + (koniec - start) + "ms");
System.out.println(" Napis ma długość " + wynik.length());
}
System.out.println();
}
}
package p19_napisy;
public class InnaKlasa {
public static String dajStringaZKodu() {
return "Ala ma kota";
}
public static String dajStringaNowego() {
return new String("Ala ma kota");
}
}
package p19_napisy;
public class OperacjeNaStringach {
public static void main(String[] args) {
String napis = "Ala ma kota";
System.out.println(napis);
napis.concat(" Filemona");
napis.replace("Ala", "Alicja");
System.out.println(napis); // napis się nie zmienił
System.out.println();
napis = napis.concat(" Bonifacego");
System.out.println(napis); // teraz zmieniony
System.out.println("\nMetody informacyjne");
System.out.println(napis.length());
System.out.println(napis.charAt(2)); // numeracja od 0
//EXN System.out.println(napis.charAt(30));
System.out.println(napis.codePointAt(2)); // kod Unicode
System.out.println("\nSprawdzanie czy zawiera fragment");
// istotna jest też wielkośc liter
System.out.println(napis.contains("kot"));
System.out.println(napis.startsWith("Ala"));
System.out.println(napis.endsWith("kot"));
System.out.println(napis.equals("ala ma kota bonifacego")); // F
// a to nie patrzy na wielkość liter
System.out.println(napis.equalsIgnoreCase("ala ma kota bOnIfAcEgO")); // T
System.out.println("\nWyszukiwanie");
System.out.println(napis.indexOf("ma"));
System.out.println(napis.indexOf("pies")); // -1
System.out.println(napis.indexOf('a')); //2
System.out.println(napis.indexOf('a', 3)); //5 bo szukam litery a od pozycji nr 3
System.out.println(napis.lastIndexOf('a')); // ostatnie a w napisie
System.out.println("\nMetody zwracające zmieniony napis");
System.out.println(napis.concat(" i jeszcze psa Reksia"));
System.out.println("|"+napis.substring(7, 15)+"|"); // od 7 włącznie, do 15 wyłączając; 15-7 = 8, 8 to jest długość wynikowego słowa
System.out.println("|"+napis.substring(7)+"|"); // od 7 do końca
System.out.println(napis.toLowerCase());
System.out.println(napis.toUpperCase());
// replace zamienia wszystkie wystąpienia
System.out.println(napis.replace(' ', '_'));
System.out.println(napis.replace("ma", "posiada"));
// Działa na wyrażeniach regularnych.
// Ten przykład zamienia pierwsze litery słów (po spacjach)
System.out.println(napis.replaceAll(" .", " X"));
}
}
package p19_napisy;
import java.util.ArrayList;
import java.util.List;
public class Parametry {
// String jest niemutowalny / immutable.
// Żadna operacja nie zmienia obiektu String w środku.
static void metoda(String s) {
System.out.println(s);
s += " ma kota";
// przy takim zapisie do zmiennej s (lokalna wewnątrz metody) wpisywany jest adres nowego obiektu String
// nie jest to zmiana obiektu String "w środku", ani nie wpływa to na zmienną txt w main
// s = s + " ma kota";
// s = new String(s + " ma kota");
System.out.println(s);
}
static void builder(StringBuilder sb) {
System.out.println(sb);
sb.append(" ma psa");
// zmiana obiektu "w środku"
System.out.println(sb);
}
static void zmienListe(List<String> lista) {
System.out.println(lista);
lista.remove("Ala");
lista.add("Zuzanna");
System.out.println(lista);
}
public static void main(String[] args) {
String txt = "Ala";
metoda(txt);
System.out.println(txt);
System.out.println();
StringBuilder sb = new StringBuilder("Ola");
builder(sb);
System.out.println(sb);
System.out.println();
List<String> imiona = new ArrayList<>();
imiona.addAll(List.of("Adam", "Ala", "Basia", "Marek"));
System.out.println(imiona);
zmienListe(imiona);
System.out.println(imiona);
}
}
package p19_napisy;
import java.util.Objects;
public class Porownywanie {
public static void main(String[] args) {
String ala = "Ala";
final String final_ala = "Ala";
String a = "Ala ma kota";
String b = "Ala ma kota";
String c = "Ala" + " ma kota";
String d = final_ala + " ma kota";
String e = InnaKlasa.dajStringaZKodu();
String f = new String(a);
String g = ala + " ma kota";
// tak samo jest dla danych wczytywanych z zewnętrznych źródeł: konsola, plik, baza danych
System.out.println("==");
System.out.println(a == "Ala ma kota");
System.out.println(a == a);
System.out.println(a == b);
System.out.println(a == c);
System.out.println(a == d);
System.out.println(a == e);
System.out.println(a == f);
System.out.println(a == g);
System.out.println();
System.out.println("intern");
// intern zwraca referencję do stringa o takiej samej treści, ale pochodzącego z puli stringów
// jeśli w puli jeszcze go nie było, to dodawany
System.out.println(a.intern() == f.intern());
System.out.println();
System.out.println("equals");
System.out.println(a.equals(a));
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(a.equals(d));
System.out.println(a.equals(e));
System.out.println(a.equals(f));
System.out.println(a.equals(g));
System.out.println("Ala ma kota".equals(g));
System.out.println(Objects.equals(a, g));
}
}
package p19_napisy.regex;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
public class AnalizaLogow1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Podaj nazwę pakietu: ");
String pakiet = sc.nextLine();
try(BufferedReader input = Files.newBufferedReader(Paths.get("pliki/history.log"))) {
String line;
while((line = input.readLine()) != null) {
if(line.contains(pakiet)) {
System.out.println(line);
}
}
} catch (IOException e) {
e.printStackTrace();
};
}
}
package p19_napisy.regex;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AnalizaLogow2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Podaj nazwę pakietu: ");
String pakiet = sc.nextLine();
// Jeśli wyrażenie regularne ma być używane wielokrotnie, np. w pętli, to opłaca się je "skompilować".
// quote jest po to, aby znaki specjalne - gdyby występowały w tekście - nie miały znaczenia w wyrażeniu regularnym
String regex = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\|\\w+\\|[^|]*" + Pattern.quote(pakiet) + "[^|]*\\|";
System.out.println("regex: " + regex);
Pattern pattern = Pattern.compile(regex);
try(BufferedReader input = Files.newBufferedReader(Paths.get("pliki/history.log"))) {
String line;
while((line = input.readLine()) != null) {
Matcher m = pattern.matcher(line);
if(m.find()) {
System.out.println(m.group());
}
}
} catch (IOException e) {
e.printStackTrace();
};
}
}
package p19_napisy.regex;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AnalizaLogow3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Podaj fragment nazwy pakietu: ");
String pakiet = sc.nextLine();
// Jeśli wyrażenie regularne ma być używane wielokrotnie, np. w pętli, to opłaca się je "skompilować".
// quote jest po to, aby znaki specjalne - gdyby występowały w tekście - nie miały znaczenia w wyrażeniu regularnym
// W tej wersji "interesujące fragmenty" biorę w nawiasy okrągłe, aby później odczytać jako grupy
String regex = "^(\\d{4}-\\d{2}-\\d{2}) (\\d{2}:\\d{2}):\\d{2}\\|(\\w+)\\|([^|]*" + Pattern.quote(pakiet) + "[^|]*)\\|";
// System.out.println("regex: " + regex);
Pattern pattern = Pattern.compile(regex);
try(BufferedReader input = Files.newBufferedReader(Paths.get("pliki/history.log"))) {
String line;
while((line = input.readLine()) != null) {
Matcher m = pattern.matcher(line);
if(m.find()) {
// System.out.println(m.group());
System.out.printf("Data: %s, godzina %s, pakiet: %s, akcja: %s\n",
m.group(1), m.group(2), m.group(4), m.group(3));
}
}
} catch (IOException e) {
e.printStackTrace();
};
}
}
package p19_napisy.regex;
import java.util.regex.Pattern;
public class Przyklad1 {
public static void main(String[] args) {
boolean wynik;
wynik = Pattern.matches("ab?c*d+", "abcd");
System.out.println(wynik);
wynik = Pattern.matches("ab?c*d+", "acd");
System.out.println(wynik);
wynik = Pattern.matches("ab?c*d+", "abd");
System.out.println(wynik);
wynik = Pattern.matches("ab?c*d+", "abc");
System.out.println(wynik);
wynik = Pattern.matches("ab?c*d+", "abcccccddddddd");
System.out.println(wynik);
wynik = Pattern.matches("ala|magda", "ala");
System.out.println(wynik);
wynik = Pattern.matches("(a|bc)+x", "abcbcbcbcaaaaabcabcx");
System.out.println(wynik);
wynik = Pattern.matches("ab?c*d+", "abcccccddddddd");
System.out.println(wynik);
}
}
package p19_napisy.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Przyklad2 {
public static void main(String[] args) {
boolean wynik;
Pattern pattern = Pattern.compile("ab?c*d+");
Matcher matcher = pattern.matcher("abcd");
wynik = matcher.matches();
System.out.println(wynik);
matcher.reset("abcccddd");
wynik = matcher.matches();
System.out.println(wynik);
matcher.reset("XXabcdbubaaccdddddsdkfjabdd");
wynik = matcher.matches(); // sprawdza całość
System.out.println(wynik);
// Matcher ma wewnętrzy stan, w którym pamięta co ostatnio znalezł i kolejne wywołanie find przechodzi do drugiego wystąpienia zworca w tekście
int gdzie, end;
while(matcher.find()) {
gdzie = matcher.start();
end = matcher.end();
System.out.println("Znalazłem od "+gdzie + " do " + end
+ " napis: " + matcher.group());
gdzie ++;
}
}
}
package p19_napisy.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Przyklad3 {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("Mam na imi[eę] (\\p{L}+) a na nazwisko (\\p{L}+)");
Matcher matcher = pattern.matcher(
"Cześć! Mam na imię Jola a na nazwisko Żółtkowska. A kot Feliks.");
if(matcher.find()) {
System.out.println("Znalazłem kogoś");
String caly = matcher.group(0);
System.out.println(caly);
String imie = matcher.group(1);
String nazwisko = matcher.group(2);
System.out.println("To jest "+imie+" "+nazwisko);
} else {
System.out.println("Nie pasuje");
}
}
}
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