Problem z zamianą stringów

0

Pisze prosty program z zamianą stringów za pomocą funkcji replace

 String numberString;
		int number=123456;
	
		// convert int to string
		numberString = String.valueOf(number);
		char[] char = new char[7];
		String napis = "S4P6W7M522SC3OXX55K3NN77666N34M2";
		char[] array = napis.toCharArray();

		// loop which pulls the last six characters
		int index2 = 0;
		for (int i = 0; i < array.length; i++) {
			if (i >= 26 && i <= 32) {
				chars[index2] = array[i];
				index2++;
			}

		}

		String Str = new String(napis);
		System.out.println("String: " + napis);
		// Convert char to string
		String kod = String.valueOf(chars);
		System.out.print("Result " + kod);
		// show new String
		String newString = napis.replace(kod, numberString);
		System.out.print("New String: " + newString);

w wyniku czego otrzymuje na wyjściu
String: S4P6W7M522SC3OXX55K3NN77666N34M2
Result 6N34M2
New String: S4P6W7M522SC3OXX55K3NN77666N34M2
a powinno być
S4P6W7M522SC3OXX55K3NN7766123456
Nie wiem dlaczego tak się zmienia

0

Masz tablicę która trzyma 7 elementów a powinna 6. Przepisujesz indeksy od 26 do 32 włącznie a powinieneś do 31 włącznie. Oprócz tego da się taką podmianę zrobić w dużo prostszy sposób. Nie trzeba nic przepisywać do tablic.

0

Ze względu na błędy w przepisywanie wartości do tablicy chars zmienna "kod" nie zawiera tego na co wygląda. W "napis" masz 32 znaki, ale indeksowane od 0, a nie od 1.

0
        // loop which pulls the last six characters
        int index2 = 0;
        for (int i = 0; i < array.length; i++) {
            if (i >= 26 && i <= 32) {
                chars[index2] = array[i];
                index2++;
            }

        }

Sam zacząłem niedawno naukę Javy, więc zapytam po co ta pętla i kombinacje z tablicami skoro można to imho prościej napisać na Stringach?


		 String numberString;
	        int number=123456;
	        // convert int to string
	        numberString = String.valueOf(number);

	        String napis = "S4P6W7M522SC3OXX55K3NN77666N34M2";

	        System.out.println("String: " + napis);
	        // Getting last six characters from String
	        String kod = napis.substring(napis.length()-6, napis.length());
	        System.out.println("Result " + kod);
	        // show new String
	        String newString = napis.replace(kod, numberString);
	        System.out.print("New String: " + newString);
0

Przy takich zabawach dobrze jest zamienić:

System.out.print("Result " + kod);

na:

System.out.print("Result: [" + kod+"]");

ew.

System.out.print(String.format("Result: [%s]", kod));

Dzięki czemu masz szansę na dostrzeżenie dodatkowych, niechcianych znaków w swoich "wycinankach".

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