0 Daumen
165 Aufrufe

Hallo!

Gesucht ist ein Javaprogramm, das für einen 4 stelligen Code (Zeichenketten) alle Kombinationen für Groß- und Kleinbuchstaben angibt.

Z. B.

ABCD

aBCD

AbCD

ABcD

ABCd

abCD

und so weiter.

Gruß!

BND

von

1 Antwort

+2 Daumen
 
Beste Antwort
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]

von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community