Zamiana ostatniego znaku

0

Mam problem próbuje wypełnić bazę danych mam w pliku txt imiona i w 2 nazwiska. Nazwiska i imiona nie maja spacji ani tabulacji oddziela je tylko enter. Chcę stworzyć funkcję która przy napotkaniu na imię które kończy się na literę "a" zamieniło mi końcówkę nazwiska które kończy się na "i" na literę "a". Oczywiście funkcje z tej klasy wywołuje w innej odczyt i dodanie och do siebie działa.
Program wygląda na poprawny przynajmniej nie ma błędów ani nie wywala errorów ale nie zmienia mi liter. Co robię nie tak?


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;


public class wypelniacz {

	private int i=0;
	String imie;
	String nazwisko;
	FileReader im= null,nazw = null;
	
	public void openFile(){


		//OTWIERANIE PLIKU:
		try {
			nazw = new FileReader("nazwiska.txt");
			im = new FileReader("imiona.txt");
		} catch (FileNotFoundException e) {
			System.out.println("BŁĄD PRZY OTWIERANIU PLIKU!");
			System.exit(1);
		}
	

	}
	
	public void readFile(){
		BufferedReader bfri = new BufferedReader(im);
		BufferedReader bfrn = new BufferedReader(nazw);


		while(i<100){
			i++;
			try {
				nazwisko = bfrn.readLine().trim();
				imie = bfri.readLine().trim();

				if(imie.charAt(imie.length()-1)=='a'){
					if(nazwisko.charAt(nazwisko.length()-1)=='i'){
						nazwisko.replace((char) (nazwisko.length()-1), 'a');
					}
					
				}
			
				System.out.println(imie+"  "+nazwisko);
				
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}
	
	
	public void closeFile(){
		try{
			im.close();
			nazw.close();
			
		}catch(Exception ex){
			System.out.println("file not closed: "+ex);
		}
	}

 
0

Zmień kluczowy fragment na taki:

                                if(imie.charAt(imie.length()-1)=='a'){
                                        System.out.println("Imie konczy sie na a");
                                        if(nazwisko.charAt(nazwisko.length()-1)=='i'){
                                                System.out.println("Nazwisko konczy sie na i");
                                                nazwisko.replace((char) (nazwisko.length()-1), 'a');
                                        }
 
                                }

i sie dowiesz co jest nie tak.

0

Wbij sobie, że Stringi w Javie są niemutowalne - jak raz stworzysz Stringa to pozostaje on już tak, aż do końca (czyli do usunięcia z pamięci).

String.replace() tworzy nowego Stringa, a więc musisz wynik tej operacji przypisać do jakiejś zmiennej. Stawiam skrzynkę piwa, że IDE pokazuje ci obok tej linii ostrzeżenie, że nie zapisujesz nigdzie wyniku funkcji.

Edit:
A i nie dostrzegłem następnego błędu. Funkcja replace przyjmuje dwa chary i zamienia wszystkie wystąpienia pierwszego na drugi. Tutaj musisz użyć funkcji String.substring, a potem dodać literkę a (zwykłym plusem na przykład).

0

A coś bardziej konkretnego np w postaci kodu? ^^

0

System.out.println("dupa".substring(0, 3) + 'y');

0

Dalej nie wiem jak rozwiązać problem twoje rozwiązanie wydaje się fajne ale jak tu zapakować "automat"?

 package org.main.Hibernate;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Random;
import java.util.Scanner;
import java.util.StringTokenizer;

import org.hibernate.Session;

public class wypelniacz {

	private int i=0;
	String imie;
	String nazwisko;
	FileReader im= null,nazw = null;
	
	public void openFile(){


		//OTWIERANIE PLIKU:
		try {
			nazw = new FileReader("nazwiska.txt");
			im = new FileReader("imiona.txt");
		} catch (FileNotFoundException e) {
			System.out.println("BŁĄD PRZY OTWIERANIU PLIKU!");
			System.exit(1);
		}
	

	}
	
	public void readFile(){

		//buffor odczytu
		BufferedReader bfri = new BufferedReader(im);
		BufferedReader bfrn = new BufferedReader(nazw);

		String s11;
		
		while(i<100){
			i++;
			
			
			//tworzy obiekt sessji, rozpoczyna ja,tworzy obiekt do utrwalania
			Session session = HibernateConfig.getSessionFactory().openSession();
			session.beginTransaction();
			HibernateData dbobject = new HibernateData();
			//pobieranie wartosci z pliku txt
			try {
				nazwisko = bfrn.readLine().trim();
				imie = bfri.readLine().trim();
				s11=nazwisko;

				//nie dziala 
				if(imie.charAt(imie.length()-1)=='a'){

					if(nazwisko.charAt(nazwisko.length()-1)=='i'){
	
						s11 = nazwisko.replace((char) (nazwisko.length()-1), 'a');
					}
					
				}
				

			
					
				//wstawianie wartosci do nowego pracowinka
				dbobject.setEmpFirstName(imie);
				dbobject.setEmpLastName(nazwisko);
				

			

				
				session.save(dbobject);
				session.getTransaction().commit();
				
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}
	
	
	public void closeFile(){
		try{
			im.close();
			nazw.close();
			
		}catch(Exception ex){
			System.out.println("file not closed: "+ex);
		}
	}
}

ta konwersja musi być automatyczna tzn ja nie wiem jakie imię o jakiej długości się trafi aplikacja sama ma sobie to sprawdzić i jeśli imię ma ostatni znak "a" i nazwisko ma ostatni znak "i" to ma zmienić "i" w nazwisku na "a" Szukałem tutków w których jest pokazana operacja na stringach ale wszystkie ograniczają się do odczytu i ewentualnie doklejenia jakiegoś lancucha na koniec a mnie interesuje zamiana tego co jest na wejściu jeśli ma podany parametr (tu litery "a" i "i")

0

Jesteś leniem, ignorantem czy inteligentny inaczej? Podałem całą receptę wcześniej z całym niezbędnym wytłumaczeniem o co chodzi. Ale niech ci będzie tu masz kod poglądowy:

public class Main {

    public static void main(String[] args) {
        String nazwisko = "Kowalski";
        System.out.println(nazwisko);
        nazwisko = nazwisko.substring(0, nazwisko.length() - 1) + 'a';
        System.out.println(nazwisko);
    }

}
0

Dzięki Wibi ;]
Działa ^^

PS. Dzięki za rybę ^^

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