Treść Zadania
Stosując wyrażenia regularne pobieraj od użytkownika napis dopóki nie będzie składał się z trzech wyrazów
o długościach dokładnie 10 znaków. Pierwszy wyraz ma zawierać same duże litery. Drugi wyraz ma zawierać
same małe litery, trzeci wyraz ma zawierać same cyfry. Napis wynikowy ma powstać poprzez zamianę znaków
napisu trzeciego na odpowiednich pozycjach z literami pierwszego napisu, kiedy rozpatrujemy znaki
na pozycjach parzystych oraz poprzez zamianę znaków napisu trzeciego na odpowiednich pozycjach z literami
napisu drugiego, kiedy rozpatrujemy znaki na pozycjach nieparzystych. Przykład:
Dane: ABCDEFGHIJ abcdefghij 0123456789.
Wynik: 0B2D4F6H8J a1c3e5g7i9 AbCdEfGhIj
Moje Wypociny:
(Na potrzeby szybszych testów celowo zmiejszyłem długość napisów)
public class Zad1 {
static String getStringWithException() {
Scanner sc = new Scanner(System.in);
System.out.println("Enter new string:");
String text = sc.nextLine();
if (!text.matches("[A-Z]{4} [a-z]{4} [0-9]{4}")) {
throw new IllegalStateException("String is not correct: " + text);
}
return text;
}
static String stringchanger(String txt) {
if(txt == null){
throw new IllegalArgumentException("txt is null");
}
int counter = 0;
char[] array = txt.toCharArray();
char[] txt3array = new char[txt.length()];
char[] wyraz3 = Arrays.copyOfRange(array, 10, array.length);
for (int i = 0; i < txt3array.length; i++) {
if (counter == wyraz3.length) {
txt3array[i] = ' ';
counter = 0;
i++;
}
txt3array[i] = wyraz3[counter];
counter++;
}
for (int i = 0; i < txt3array.length; i++) {
if (i < 4) {
if (i % 2 == 0) {
txt3array[i] = wyraz3[i];
} else {
txt3array[i] = array[i];
}
} else if (i == 4) {
txt3array[i] = ' ';
}
if (i > 4 && i < 11) {
if (i % 2 == 0) {
txt3array[i] = array[i];
} else {
}
}
}
return new String(txt3array);
}
public static void main(String[] args) {
System.out.println(stringchanger(getStringWithException()));
}
}
Metoda StringChanger zamienia mi odpowiednio znaki w pierwszych 2 członach napisu. Trzeciego członu nawet nie robiłem bo sami widzicie jak to wygląda. Z pewnością da się to zrobić 10 razy bardziej elegancko. Jakieś pomysły ??
Z góry dzięki :)