Łańcuchy znaków, wyrażenia regularne, pliki tekstowe

Podobne dokumenty
Liczby pseudolosowe. Math. Różne sposoby generowania liczb pseudolosowych. Wybrane metody klasy Math

Metody Metody, parametry, zwracanie wartości

Podstawy i języki programowania

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Podstawy obiektowości

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

Klasy i obiekty cz II

Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach

Podstawy Java. Część II. mgr inż.marcin Borkowski

Strumienie, pliki. Sortowanie. Wyjątki.

Zajęcia 6 pliki tekstowe

Wykład 2: Podstawy Języka

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

import java.util.*; public class ListExample { public static void main(string args[]) { List<String> lista1= new ArrayList<String> ();

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Microsoft IT Academy kurs programowania

Obliczenia, zmienne. Proste działania, zmienne, rodzaje zmiennych, proste operacje i działania na zmiennych.

Programowanie w językach wysokiego poziomu

Podstawy i języki programowania

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Wprowadzenie do języka Java

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie 3 - Funkcje, pliki i klasy

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wyrażenia regularne. Wyrażenia regularne 1/41

lekcja 8a Gry komputerowe MasterMind

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

Spra r wd w za z nie e popra r wn w ości c danych c w w form r u m larz r a z ch c :

Podstawy i języki programowania

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie - instrukcje sterujące

Zaawansowane aplikacje WWW - laboratorium

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

Ćwiczenie 1. Przygotowanie środowiska JAVA

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Podstawy i języki programowania

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JDK można pobrać ze strony

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Aplikacje w środowisku Java

Programowanie w języku Java

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Wykład 2 Składnia języka C# (cz. 1)

Zajęcia 4 procedury i funkcje

Strumienie, pliki. Sortowanie. Wyjątki.

Asynchroniczne interfejsy

Rozdział 4 KLASY, OBIEKTY, METODY

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM

Języki formalne i automaty Ćwiczenia 6

Funkcje. Wprowadzenie. Mirosław Ochodek

ŁAŃCUCHY W JĘZYKU C/C++

Wybrane algorytmy tablicowe

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Programowanie 2 - Tablice i łańcuchy

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Egzamin z Podstaw informatyki i programowania 2007/2008

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Pomorski Czarodziej 2016 Zadania. Kategoria C

Wykład 4: Klasy i Metody

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

akademia androida Składowanie danych część VI

Laboratorium 10: Maszyna stanów

Tablice (jedno i wielowymiarowe), łańcuchy znaków

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Reprezentacja symboli w komputerze. Znaki alfabetu i łańcuchy znakowe. Programowanie Proceduralne 1

Programowanie w języku Java. Bazy danych SQLite w Javie

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

1 Podstawy c++ w pigułce.

Wykład 4. Klasa List Kolejki Stosy Słowniki

Zasady programowania Dokumentacja

1 Podstawy c++ w pigułce.

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

MATERIAŁY POMOCNICZE DO ĆWICZENIA 3 Klasy i obiekty; atrybuty i metody

Reprezentacja symboli w komputerze.

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Transkrypt:

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Łańcuchy znaków, wyrażenia regularne, pliki tekstowe Manipulacja łańcuchami znaków, podstawy wyrażeń regularnych, zapis i odczyt danych w pliku tekstowym

String Klasa String oferuje wiele użytecznych metod, np: testy: String tekst = "Chromosom"; System.out.println("Tekst : "+tekst); // testy System.out.println("equals(\"chromosom\") : "+tekst.equals("chromosom")); System.out.println("equalsIgnoreCase(\"chromosom\") : "+tekst.equalsignorecase("chromosom")); System.out.println("contains(\"omo\") : "+tekst.contains("omo")); System.out.println("startsWith(\"Chro\") : "+tekst.startswith("chro")); System.out.println("endsWith(\"Chro\") : "+tekst.endswith("chro")); System.out.println("length() : "+tekst.length());

String Klasa String oferuje wiele użytecznych metod, np: modyfikacje: // modyfikacje System.out.println("toLowerCase() System.out.println("toUpperCase() System.out.println("replace(\"osom\", \"atyda\") System.out.println("replaceFirst(\"o\", \"i\") System.out.println("replaceAll(\"o\", \"i\") System.out.println("concat(\"owy\") : "+tekst.tolowercase()); : "+tekst.touppercase()); : "+tekst.replace("osom", "atyda")); : "+tekst.replacefirst("o", "i")); : "+tekst.replaceall("o", "i")); : "+tekst.concat("owy"));

String Klasa String oferuje wiele użytecznych metod, np: modyfikacje: // wycinanie i dzielenie System.out.println("substring(4) : "+tekst.substring(4)); System.out.println("substring(3,6) : "+tekst.substring(3,6)); System.out.println("split(\"o\") : "+tekst.split("o")); String[] teksty = tekst.split("o"); for (String t : teksty) System.out.print(t+"#"); System.out.println(); System.out.println("split(\"o\",2) : "+tekst.split("o",2)); String[] teksty2 = tekst.split("o",2); for (String t : teksty2) System.out.print(t+"#"); System.out.println(); tekst = " "+tekst+" "; System.out.println("tekst = \" \"+tekst+\" \" : "+tekst); System.out.println("trim() : "+tekst.trim());

Wyrażenia regularne (regular expressions, regex, regexp) Wyrażenia regularne umożliwiają opis łańcuchy znaków. Dzięki nim można opisać pewne zbiory łańcuchów znaków, czasem dość skomplikowane w sposób ogólny, np: PESEL (~jako dokładnie 11 liczb) adresy www (~jako zbiór liter i liczb przedzielonych kropkami) tagi HTML (~ wyrażenia pomiędzy znakami < i >) itd, itp...

Wyrażenia regularne - zastosowania Wyrażenia regularne mogą się przydać przy pracy z łańcuchami znaków w wielu sytuacjach, np: Wyszukiwanie określonych sekwencji znaków (dokładnie lub z pewną dowolnością) - np. słów, cytatów, liczb, określonych sekwencji DNA Uzyskiwanie informacji - np. uzyskiwanie konkretnych informacji z odpowiednio sformatowanego tekstu (formularzy, tabel itp) Zamianie łańcuchów znaków Sprawdzanie poprawności wprowadzanych informacji w aplikacjach, stronach internetowych itp...

Wyrażenia regularne - jak to wygląda W wyrażeniach regularnych, jak w każdym języku, określone znaki. lub ich zestawy posiadają konkretne znaczenie, które musimy znać (lub wiedzieć gdzie je znaleźć ;-)) aby je prawidłowo wykorzystać. Przykłady: \A - początek łańcucha \d lub [0-9] - cyfra \d+ - jedna lub więcej cyfr ^ - początek linii. - Umieszczając wyrażenie regularne w łańcuchu należy pamiętać, że przed znakiem \ (który ma specjalne znaczenie) należy umieścić jeszcze jeden znak \. np: "\\D+\\d?" co oznacza: Jedna lub więcej nie cyfr a potem zero lub jedna cyfra

Znaki Wyrażenia regularne (wybór) wyrażenie znaczenie np. A dany znak (tu konkretnie A) Ala dany łańcuch znaków (tu Ala) \t tabulacja \n nowy wiersz \r powrót karetki (powrót do początku wiersza)

Wyrażenia regularne (wybór) Klasy znaków wyrażenie znaczenie. dowolny znak \s biały znak - gł. spacja, tabulacja, nowy wiersz, powrót karetki \S lub [^\s] dowolny znak z wyjątkiem białego znaku \d lub [0-9] cyfra \D lub [^0-9] dowolny znak z wyjątkiem cyfry \w lub [a-za-z_0-9] dowolny znak tworzący słowa (litery, cyfry i _) \W lub [^\w] dowolny znak nie tworzący słowa ( nie litery, cyfry i _) [xyz] lub (x y z) jeden z podanych (łańcuchów) znaków (tu: x, y lub z) [^xyz] dowolny znak, oprócz podanych (tu oprócz: x, y, z) [a-z] dowolny znak z zakresu (tu dowolna mała litera) [a-z0-9] dowolny znak z zakresów (tu dowolna mała litera lub cyfra) Uwaga: w powyższych sytuacjach znak ^ oznacza zaprzeczenie a nie początek łańcucha

Wyrażenia regularne (wybór) Znaki kotwiczące dopasowanie wyrażenie znaczenie ^ początek wiersza $ koniec wiersza \b granica słowa \B nie granica słowa Znaki określające ilość dopasowań wyrażenie? 0 lub 1 raz + jeden lub więcej razy * 0 lub więcej razy {n n - razy {n, n lub więcej razy {n,m między n a m razy znaczenie

Wyrażenia regularne -przykłady // Jedna nie cyfra System.out.println("matches(\"\\\\D\") : "+tekst.matches("\\d")); // Jedna lub więcej nie cyfr System.out.println("matches(\"\\\\D+\") : "+tekst.matches("\\d+")); // Jedna lub więcej cyfr System.out.println("matches(\"\\\\d+\") : "+tekst.matches("\\d+")); // Jedna lub więcej nie cyfr a potem zero lub więcej cyfr System.out.println("matches(\"\\\\D+\\\\d*\") : "+tekst.matches("\\d+\\d*")); // Jedna lub więcej nie cyfr a potem jedna lub więcej cyfr System.out.println("matches(\"\\\\D+\\\\d+\") : "+tekst.matches("\\d+\\d+")); // Jedna lub więcej nie cyfr a potem zero lub jedna cyfra System.out.println("matches(\"\\\\D+\\\\d?\") : "+tekst.matches("\\d+\\d?"));

Wyrażenia regularne -przykłady String tekst2 = "Chromosom2"; System.out.println("tekst2 : "+tekst2); // Jedna lub więcej nie cyfr a potem jedna lub więcej cyfr System.out.println("matches(\"\\\\D+\\\\d+\") : "+tekst2.matches("\\d+\\d+")); // Jedna lub więcej nie cyfr a potem zero lub jedna cyfra System.out.println("matches(\"\\\\D+\\\\d?\") : "+tekst.matches("\\d+\\d?")); // Jeden lub więcej znaków które mogą być częścią słowa (litery, cyfry i znak _) System.out.println("matches(\"\\\\w+\") : "+tekst2.matches("\\w+")); // Jeden lub więcej znaków które nie mogą być częścią słowa (nie litery, cyfry i znak _) System.out.println("matches(\"\\\\W+\") : "+tekst2.matches("\\w+")); // Jeden lub więcej białych znaków (spacje, tabulatory itd.) System.out.println("matches(\"\\\\s+\") : "+tekst2.matches("\\s+")); // Jeden lub więcej nie białych znaków (nie spacje, tabulatory itd.) System.out.println("matches(\"\\\\S+\") : "+tekst2.matches("\\s+")); // Kropka oznacza jakikolwiek znak System.out.println("matches(\"Chr.m.s.m2\") : "+tekst2.matches("chr.m.s.m2")); //.+ oznacza jeden lub więcej jakikolwiek znaków System.out.println("matches(\"Chr.+m2\") : "+tekst2.matches("chr.+m2"));

Wyrażenia regularne -przykłady // {2,9 oznacza od dwu do dziewięciu elementów wskazanych wcześniej - tu dowolnych znaków System.out.println("matches(\"Chr.{2,9m2\") : "+tekst2.matches("chr.{2,9m2")); // {2,9 oznacza conajmniej dwa elementy wskazane wcześniej - tu dowolnych znaków System.out.println("matches(\"Chr.{2,m2\") : "+tekst2.matches("chr.{2,m2")); // {2,9 oznacza dwa elementy wskazane wcześniej - tu dowolnych znaków System.out.println("matches(\"Chr.{2m2\") : "+tekst2.matches("chr.{2m2"));

Wyrażenia regularne -przykłady String tekst3 = "chromosom to nie jest ciało które tworzy chrom"; System.out.println(tekst3); // ^ oznacza początek linii System.out.println("replaceAll(\"^chrom\", \"CHROM\") : "+ tekst3.replaceall("^chrom", "CHROM")); // $ oznacza koniec linii System.out.println("replaceAll(\"chrom$\", \"CHROM\") : "+ tekst3.replaceall("chrom$", "CHROM")); // Dzielimy łańcuch po literce "o" po której następuje jeden znak słowa System.out.println("split(\"o\\\\w\\\") : "+ tekst3.split("o\\w")); String[] teksty = tekst3.split("o\\w"); for (String t : teksty) System.out.print(t+"#"); System.out.println(); // Dzielimy łańcuch po literce "o" przed którą występuje litera "r" lub "s" System.out.println("split(\"(r s)o\") : "+ tekst3.split("(r s)o")); teksty = tekst3.split("(r s)o"); for (String t : teksty) System.out.print(t+"#"); System.out.println();

Wyrażenia regularne -przykłady System.out.println("indexOf(\"o\") : "+tekst3.indexof("o")); int i=0; ArrayList miejsca = new ArrayList(); while (i>=0) { // szukamy nastepnego łańcucha (tu literki "o") i=tekst3.indexof("o",i); if (i>=0) { miejsca.add(i); // przesuwamy indeks o 1, aby nie odszukać ponownie tej samej litery i++; System.out.println(miejsca);

A teraz na chwilę wrócimy do ArrayList ArrayList<String> lista = new ArrayList<String>(Arrays.asList( "Ala", "Ola", "Ula") ); System.out.println(lista); Integer a = 1; System.out.println(a); a=a+1; System.out.println(a); ArrayList<Integer> lista2 = new ArrayList<Integer>(Arrays.asList(a,2,3)); System.out.println(lista2);

Zadanie Napisz program który: Zapisze w pliku tekstowym kilka serii danych składających się z szeregu liczb całkowitych Odczyta z pliku dane, rozdzieli je na pojedyncze pomiary i umieści w tablicach double[] - każda seria w osobnej tablicy tablice z danymi umieści w ArrayList Wypisze wszystkie dane na ekranie - serie w kolejnych liniach

Zadanie Zapis danych w pliku private static void zapiszplik(string plik) { PrintWriter out; try { out = new PrintWriter(plik); out.println("3:4:5:4:5:3:4:4:5:6:4:3:4"); out.println("4:5:7:5:5:4:4:3:7:6:8:3:4"); out.println("3:3:4:3:2:2:3:4:4:3:4:3:5"); out.println("6:6:5:8:9:7:5:4:10:9:6:7:6"); out.close(); catch (FileNotFoundException e) { System.out.println("Brak Pliku!"); e.printstacktrace();

Zadanie odczyt danych z pliku, umieszczenie w tablicach (osobna metoda) i umieszczenie tablic w ArrayList private static ArrayList<double[]> odczytajdanezpliku(string plik) { File plikdane = new File(plik); Scanner skaner; ArrayList<double[]> dane = new ArrayList<double[]>(); try { skaner = new Scanner(plikDane); while (skaner.hasnextline()) { double[] dtab = podajdane(skaner.nextline()); dane.add(dtab); catch (FileNotFoundException e) { System.out.println("Brak Pliku do odczytania!"); e.printstacktrace(); return dane;

Zadanie pobieranie danych z łańcucha znaków i umieszczenie ich w tablicy double[] private static double[] podajdane(string linia){ String [] tab = linia.split(":"); double [] data = new double[tab.length]; for (int i=0 ; i<tab.length; i++) { data[i] = Double.parseDouble(tab[i]); return data;

Zadanie wypisanie danych private static void wypiszdane(arraylist<double[]> dane) { System.out.println("Odczytane dane: "); for (double[] tab : dane) { for (double d : tab) { System.out.print(d+" "); System.out.println();

Zadanie metoda główna public static void main(string[] args) { String plik = "dane.txt"; zapiszplik(plik); ArrayList<double[]> dane = odczytajdanezpliku(plik); wypiszdane(dane);