Operacje na zmiennych typu String

0

Witam, mam taki problem, wczytuję z pliku tekst typu Jan Andrzej Kowalski, Marian Stefan Nowak itp. i chcę potem stworzyć obiekt, gdzie pierwsze i drugie imię oraz nazwisko tworzą ten właśnie obiekt, jednak wczytywanie pliku odbywa się linijka po linijce i fullName zapisywane jest do tablicy stringów, a rozdzielenie na te trzy składowe odbywa się przy pomocji funkcji indexOf, która nie działa na elementy tablicy. Jak to obejść? Jest jakiś inny sposób na rozbicie tego wyjściowego stringa na te trzy inne?

public class Test {
	public static void main(String[] args) throws IOException {
		
		Scanner in = new Scanner(System.in);

		int n;
		System.out.print("rozmiar tablicy: ");
		n = in.nextInt();
		
		User tab[] = new User[n];
		
		String nazwa_pliku = "c:/plik.txt";
		
		CzytajPlik plik = new CzytajPlik(nazwa_pliku);
		
		for(int i = 0; i<n; i++)
		{
			String[] fullName = plik.OtworzPlik(); 
			String name = fullName.substring(0, fullName.indexOf(' '));
			String secondName = fullName.substring(name.length() +1, fullName.lastIndexOf(' '));
			String lastName = fullName.substring(name.length() + secondName.length() + 2, fullName.length());
			User u = new User(name, secondName, lastName);
			tab[i] = u;
		}
		
		for(int i = 0; i<n; i++)
		{
			tab[i].print();
		}
		    
	}
	}
public class CzytajPlik {
	
	private String sciezka;
	
	public CzytajPlik(String plik_sciezka)
	{
		sciezka = plik_sciezka;
	}
	
	public String[] OtworzPlik() throws IOException {
        
        FileReader fr = new FileReader(sciezka);
        BufferedReader czytajTekst = new BufferedReader(fr);
         
        int liczbaWierszy = CzytajLinie();
        String[] tekstDane = new String[liczbaWierszy];
         
        int i;
         
        for(i=0; i < liczbaWierszy; i++){
            tekstDane[i] = czytajTekst.readLine();
        }
         
        czytajTekst.close();
        return tekstDane;
    }
	
	int CzytajLinie() throws IOException {
        
        FileReader plik_do_czytania = new FileReader(sciezka);
        BufferedReader bf = new BufferedReader(plik_do_czytania);
         
        String linie;
        int liczbaLinii = 0;
        while((linie = bf.readLine()) != null){
            liczbaLinii++;
        }
        bf.close();
         
        return liczbaLinii;
    }
	
}
2

Słusznie zauważyłeś że próbujesz wykonać to na tablicy (całej), a nie na konkretnym elemencie. Pogłówkuj, już wcześniej sobie z tym problemem poradziłeś.

0

Proponuję użyć lepiej string.split(" ")

0
AreQ212 napisał(a):

Słusznie zauważyłeś że próbujesz wykonać to na tablicy (całej), a nie na konkretnym elemencie. Pogłówkuj, już wcześniej sobie z tym problemem poradziłeś.

No właśnie jest dokładnie tak jak napisałeś, zmieniłem dwie linijki, by operacja wykonywała się na jednym elemencie i chyba działa, dziękie za pomoc :)

String[] tablicaString = plik.OtworzPlik();

String fullName = tablicaString[i];
0

Ta cała klasa CzytajPlik jest niepotrzebna.
Próbowałeś z Files.readAllLines?
A w klasie User zapiast print() zaimplementowałbym toString().

1 użytkowników online, w tym zalogowanych: 0, gości: 1