Niestety komputer się zawiesił i straciałam treść swojego posta.
Niestety eclipse nie dopuszcza takiego formatu:
["][a-zA-z\s]{1,}["]
"["][a-zA-z\s]{1,}["]"
Dopuszcza taki:
"\"][a-zA-z\\s]{1,}\"]"
ale nic nie dopasował.
Zamieszczę cały kod programu(
JEGO IDEA JEST PROSTA JAK BUDOWA CEPA, NAPRAWDĘ i kod działa, tylko regexa nie umiem znaleźć, na bieżącym etapie mamy już wyłuskany sam kod tabeli i na nim już tylko operujemy, no i jeszcze lata w których odbyły się igrzyska), jednakże pokrótce go opiszę.
Należy mieć plik 1.txt na dysku D, z kodem źródłowym strony:
pobierzDaneZPliku pobiera treść pliku tekstowego i wypluwa Stringa
ArrayList<String> poszukiwanieWzorca(String txt, String regex) dopasowuje wzorzec regex do Stringa txt i wypluwa tablicę z dopasowanymi Stringami
Jest to dla mnie bardzo ważne, bo to pierwsze zadanie w tym półroczu z którym nie mogę sobie poradzić, co jest dla mnie irytujące,a nie chcę żeby mi przepadł punkt za nie, zwłaszcza że odwaliłam już prawie całą robotę i siedziałam nad tym parę godzin.
Kod: Zaznacz cały
import java.io.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Io {
public Io() {
}
public static String pobierzDaneZPliku(String ścieżka) throws IOException {
FileInputStream is = new FileInputStream(ścieżka);
StreamTokenizer st = new StreamTokenizer(new FileReader(ścieżka));
StringBuffer napis = new StringBuffer("");
int n = 0;
while ((st.TT_EOF != st.nextToken())) {
if (st.ttype == st.TT_NUMBER) {
napis.append(st.nval);
}
if (st.ttype == st.TT_WORD) {
napis.append(st.sval);
}
napis.append(" ");
n = n + 1;
}
System.out.println(napis);
String tekstZPliku = napis.toString();
return tekstZPliku;
}
public static ArrayList<String> poszukiwanieWzorca(String txt, String regex) {
// Wzorzec: jedno lub więcej wystąpień dowolnej cyfry
// String regex = "table class.+(w klasyfikacji)";
//<table class="wikitable" style="empty-cells: show; text-align:center;" border="1">
System.out.println("Tekst: \n" + "'" + txt + "'" +
"\nWzorzec: " + "'" + regex + "'");
// Kompilacja wzorca
Pattern pattern = Pattern.compile(regex);
// Uzyskanie matchera
Matcher matcher = pattern.matcher(txt);
String wynik = ""; // do prezentacji wyników wyszukiwania
ArrayList<String> koniec = new ArrayList<String>();
while (matcher.find()) {
koniec.add(matcher.group());
wynik += "\nDopasowano podłańcuch '" +
matcher.group() + "'" + // group() zwraca ostatni dopasowany tekst
"\nod pozycji " + matcher.start() + // start() zwraca jego poczatkową pozycję
"\ndo pozycji " + matcher.end(); // end() zwraca pozycję po ostatnim dopasowanym znaku
}
if (wynik.equals("")){
wynik = "Nie znaleziono żadnego podnapisu pasującego do wzorca";
}
System.out.println();
System.out.println(koniec.size());
return koniec;
}
public static void main(String[] args) throws IOException {
String ścieżka = "d:\\1.txt";
// System.out.println(pobierzDaneZPliku(ścieżka));
//String regex = "table class.+(w klasyfikacji)";
String regex = "IO 1896.+";
ArrayList<String> pom = poszukiwanieWzorca(pobierzDaneZPliku(ścieżka ), regex);
String pom2 = pom.get(0);
System.out.println (pom2);
// teraz przygotujemy ArrayLista ArrayList, będziemy generować arraylista z latami i go wrzucać do tej tablicy(nie będziemy działać na
//arraylist od arraylist itd., tak dopiero przy wypisywaniu
ArrayList<ArrayList<String>> dane = new ArrayList<ArrayList<String>>();
regex = "\\s[1]{1}[8-9]{1}[0-9]{2}";//wzorzec dla lat bo są tam jakieś inne liczby. Spacja, jedynka, 8 albo 9, 2 cyfry.
ArrayList<String> lata = poszukiwanieWzorca(pom2, regex);
System.out.println(lata);
dane.add(lata);
//regex dla miasta i państwa będzie ten sam i będą się wpisywały pod tę samą komórkę razem
regex = "\"][a-zA-z\\s]{1,}\"]";
ArrayList<String> miastaiPanstwa = poszukiwanieWzorca(pom2, regex);
System.out.println(miastaiPanstwa);
//<td><a href="/wiki/Ateny" title="Ateny">Ateny</a></td>
}
}