Gesucht ist ein Javaprogramm, das für einen 4 stelligen Code (Zeichenketten) alle Kombinationen für Groß- und Kleinbuchstaben angibt.
Ich habe ein generisches Programm gebaut, das unabhängig von der Zeichenkettenlänge Deinen Anforderungen genügt.
Zunächst die nötigen Imports:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
Die Funktion char_array_to_string
konvertiert Char-Arrays (in denen im Programm der umzuwandelnde String gespeichert wird) zu Strings.
public static String char_array_to_string(final Character[] to_convert){
String result = "";
for(int pos = 0; pos < to_convert.length; pos++){
result = result + to_convert[pos];
}
return result;
}
Die Funktion to_binary
konvertiert eine Zahl in einen Binary-String. Der zweite Parameter length
gibt dabei an, wie lange der Ergebnis-String sein soll (Stichwort 'führende Nullen').
public static String to_binary(final int num, final int length){
String result = Integer.toString(num, 2);
if(result.length() > length){
return result;
}
for(int i = result.length(); i < length; i++){
result = "0" + result;
}
return result;
}
Schlussendlich das Programm, welches die zuvor erwähnten Funktionen benötigt:
public static List<String> lower_upper_combs(final String to_convert){
System.out.println(to_binary(30,5));
final Character[] word_container = new Character[to_convert.length()];
final int length = word_container.length;
final Set<String> duplicate_filter = new HashSet<>();
final String lower_case_to_convert = to_convert.toLowerCase();
for(int pos = 0; pos < length; pos++){
word_container[pos] = lower_case_to_convert.charAt(pos);
}
for(int counter = 0; counter < Math.pow(2, length); counter++){
final String mask = to_binary(counter, length);
final Character[] converted_word = new Character[length];
for(int pos = 0; pos < length; pos++){
if(mask.charAt(pos) == '1'){
converted_word[pos] = Character.toUpperCase(word_container[pos]);
} else {
converted_word[pos] = word_container[pos];
}
}
duplicate_filter.add(char_array_to_string(converted_word));
}
return duplicate_filter.stream().collect(Collectors.toList());
}
Für Dein im Anfangspost geschildertes Problem liefert mein Programm folgenden Output:
[abcd, abcD, abCd, abCD, aBcd, aBcD, aBCd, aBCD, ABcd, ABcD, ABCd, ABCD, Abcd, AbcD, AbCd, AbCD]