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, botów: 0