Jump to content

Archived

This topic is now archived and is closed to further replies.

MapetPL

Java - Szukanie i zmienianie wyrazu w .txt

Recommended Posts

Hej, programuję w Javie od niedawna i chciałbym prosić o porady ew. fragment kodu.

Jak ma wyglądać program? Ostatnio mam do czynienia z dużą ilością plików tekstowych. Strasznie irytuje mnie gdy widzę "ktury", "poszłem" czy inne "xxx ,xxx;". Chcę napisać program który znajdzie w pliku tekstowym wyraz czy ciąg znaków (np. właśnie " ," czy ; na końcu zdania) który mu podam i zamieni go na tekst jaki chcę np. "ktury" na "który", albo " ," na ", ". Jak program ma działać wiem, ale nie wiem jak to zrealizować, mam za małą wiedzę praktyczną. W rozszerzonej wersji programu jak osiągnę to co podałem wyżej zamontuję w nim 2 tablice gdzie w pierwszej będą słowa błędne, a w drugiej w polach o tym samym indeksie słowa poprawne. Wtedy program będzie bardziej wygodny, bo tylko zmienię plik do przerobienia.

Bardzo proszę o pomoc. Jeśli to ma znaczenie piszę w programie Eclipse.

Edit. Doszedłem wczoraj do czegoś takiego:

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Scanner;

public class Tlumacz {

public static void main(String[] args) throws IOException {

FileInputStream plik = new FileInputStream("C:/Jeden.txt");

Scanner skaner = new Scanner(plik);

String slowo;

for ( int i=0; i<100000; i++)

{

slowo = skaner.next();

System.out.println(slowo);

}

System.out.println("zrobiłem");

}

}

Nie wiem co zrobić w miejscu gdzie mam i<100000, nie wiem ile słów mieści się z pliku tekstowym, a jeśli ta wartość wykracza poza ilość słów w pliku to wywala błąd:

Exception in thread "main" java.util.NoSuchElementException

at java.util.Scanner.throwFor(Unknown Source)

at java.util.Scanner.next(Unknown Source)

at Tlumacz.main(Tlumacz.java:25)

Link to comment
Share on other sites

Sorry ze dopiero teraz odpisuje, ale z powodu pewnych nie moglem uczynić tego wcześniej:>.

Zrobiłem jak podpowiedziałeś, sprawdza się świetnie.

Teraz mam inny problem, mianowicie doszedłem do wniosku, że nie bardzo wiem jak wykonywać operacje na pliku tekstowym... Mógłby ktoś opisać jak zrobić coś takiego?(troszkę zmieniłem składnie):

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.util.Scanner;

public class Tlumacz {

public static void main(String[] args) throws FileNotFoundException {

String slowoZle = new String();

String slowoDobre = new String();

String txt = new String();

FileInputStream fis = new FileInputStream("C:/jeden.txt");

Scanner skan = new Scanner(fis);

slowoZle = "Tomek";

slowoDobre = "Zdzisio";

while (skan.hasNext()){

txt = skan.next();

if (txt.equals(slowoZle)){

}

System.out.println(txt);

}

}

}

co powinienem wpisać w instrukcji if? Chcę aby slowoZle znalezione w tekście zostało wykasowane i zastąpione przez slowoDobre. Później zamierzam zamienić stringi na tablice, żeby każde słowoZle które dodam do tablicy słów złych było sprawdzane i poprawiane przez odpowiednik w tablicy słów dobrych. Tylko nie wiem jak ma wyglądać składnia właśnie na zastąpienie tych słówek. Dodam, że np jeśli tekst wygląda tak " Tomek jedzie rowerem . I Tomek, nie wie gdzie ma licznik ." to chcę żeby zamieniło się zarówno Tomek(na Zdzisio) jak i "Tomek,"(na Zdzisio,) (przypuszczam że z tym może być problem większy), a także żeby spacje przed jak i po tym słowie nie ulegały zmianie. Warto dodać, że slowoDobre nie koniecznie musi zawierać taką samą ilość słów jak slowoZle.

PS. Jak skończę ten projekt, to zamierzam dodać do programu aby usuwał średniki z końca wyrazów i zamieniał je na przecinki (jakoś średnik na końcu mnie boli w oczy :D) a także zamieniał podwójne spacje na pojedyncze.

Wiem, o dużo proszę, ale wolę wysłuchać porady od osoby która mi to łopatologicznie wytłumaczy, niż czytać książkę typu Java dla początkujących gdzie w pierwszym rozdziale piszą mi, że fajnie jakbym znał jakiś C++ >.<.

Z góry dzięki za pomoc

Link to comment
Share on other sites

Twój problem jest prawie że banalny.

Klasa String ma metodę replace(CharSequence ch1, CharSequence ch2) która wyszukuje w Stringu dane sekwencje znaków i je zamienia na drugą sekwencję.

Czyli:

String zleSlowo, dobreSlowo;

String calyTekst, poprawionyTekst;

poprawionyTekst = calyTekst.replace(zleSlowo, dobreSlowo);

Ot i cała filozofia. Calość programu sprowadza się:

a) do wczytania tekstu z pliku i zamknięcia tego pliku

b) zamiany słów w zapamiętanym tekście

c) zapisania tekstu do pliku

Po całych pięciu minutach pracy:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class WordChanger {
    private String txt;
    final private String goodWord, badWord, directory, directory2;
    public WordChanger(String s1, String s2, String dir, String dir2){
        goodWord = s1;
        badWord = s2;
        directory = dir;
        directory2 = dir2;
        loadFromFile();
        saveToFile();
    }
    private void loadFromFile(){
        txt = "";
        BufferedReader br;
        String line;
        try {
            br = new BufferedReader(new FileReader(directory));
            while((line=br.readLine())!=null){
                txt = txt+line.replace(badWord, goodWord)+'\n';
            }
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private void saveToFile(){
        BufferedWriter bw;
        try {
            bw = new BufferedWriter(new FileWriter(directory2));
            bw.write(txt);
            bw.flush();
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args){
        new WordChanger("nie","tak","c://tekst.txt","c://tekst2.txt");
    }
}

Plik wejściowy:

"ale tak ale nie

ale zawsze tak ale nigdy nie

albo tak, albo tez"

Plik wyjściowy:

"ale nie ale nie

ale zawsze nie ale nigdy nie

albo nie, albo tez"

Link to comment
Share on other sites



  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...