Operacje na zmiennych typu String

Operacje na zmiennych typu String
MT
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 7 lat
  • Postów:4
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?

Kopiuj
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;
    }
	
}
edytowany 2x, ostatnio: MoravenTolo
AreQ212
  • Rejestracja:około 11 lat
  • Ostatnio:około 5 lat
  • Postów:29
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ś.

edytowany 1x, ostatnio: AreQ212
ekhart
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • Lokalizacja:ekhart.pl
  • Postów:140
0

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


MT
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 7 lat
  • Postów:4
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 :)

Kopiuj
String[] tablicaString = plik.OtworzPlik();

String fullName = tablicaString[i];
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.