Java String darf nur bestimmte Buchstaben enthalten?
Wie kann ich prüfen, dass ein vom User eingegebener String nur bestimmte Buchstaben enthalten darf? Also man soll durch das Programm eine römische Zahl eingeben. Der String darf nur die Großbuchstaben X I und V enthalten. Wenn ein anderes Zeichen dabei ist, muss man den String erneut eingeben. Dabei dürfen die erlaubten Buchstaben mehrmals vorkommen.
Bei diesem Schritt komme ich einfach nicht weiter.
Hoffe ihr könnt mir bei diesem Problem helfen
6 Antworten
Du könntest ein Pattern erzeugen und dann die Methode
boolean match(String pattern,CharSequence input);
darauf anwenden...
Du könntest natürlich auch einfach den String Zeichen für zeichen durchlaufen und schauen, ob ein Zeichen vorkommt, das nicht erlaubt ist.
Außerdem solltest du den Syntax testen:
private boolean compile(String input){
for(int i=0;i<input.length();i++){
Character c=input.charAt(i);
if(!(c=='I'||c=='V'||c=='X'||...)){
return false;
}
//Hier evtl. Syntax testen...Oder vorher Text in Wörter/einzelne Zahlen aufteilen...
}
return true;
}
Würdest du meinen Quellcode kurz anschauen? Er scheint nicht so zu funktionieren, wie er es soll
import flanagan.io.Db;
import flanagan.io.KeyboardInput;
/**
* Versuch 2
*/
public class Switch3
{
public static void main()
{
KeyboardInput kb = new KeyboardInput();
String n;
n = Db.readLine("Ihre Eingabe.");
Grösse(n); //Länge der Zeichenkette prüfen
// Buchstaben(Grösse(n)); //Es dürfen nur Grossbuchstaben eingegeben werden
XIV(n);
System.out.println("Ihre Wert " +XIV(n));
}
public static String Grösse( String Anzahl )
{
if(Anzahl.length() == 0 || Anzahl.length() > 4 ) //Es wurde nichts oder eine grössere Zahl eingegeben
{
while (Anzahl.length() == 0 || Anzahl.length() > 4 )
{
Anzahl = Db.readLine("Sie dürfen max. 4 Zeichen verwenden.");
}
//return Anzahl;
} //Länge der Zeichenkette wurde überprüft
return Anzahl;
}
// public static String Buchstaben( String Eingabe )
// {
// if (!Eingabe.matches("[A-Z]"))
// {
// while (!Eingabe.matches("[A-Z]") )
// {
// Eingabe = Db.readLine("Sie dürfen nur Grossbuchstaben verwenden.");
// }
// //return Eingabe;
// }
// return Eingabe;
// }
public static String XIV( String XIV )
{
for(int i = 0; i < XIV.length() ; i++)
{
Character c = XIV.charAt(i);
if(!(c=='I'||c=='V'||c=='X'))
{
while (!(c=='I'||c=='V'||c=='X') )
{
XIV = Db.readLine("Ihre Eingabe darf nur aus X, I und V bestehen.");
System.out.println(XIV);
}
}
}
return XIV;
}
}
Dieser Abschnitt soll nur prüfen, ob die Eingabe nur aus X I und V besteht und zudem nicht länger als 4 Zeichen lang ist. Er funktioniert nicht, wie er es sollte....
Die Whileschleifen zur Ausgabe machen wenig Sinn...
Außerdem solltest du
System.out.println(String ausgabe);
zur Ausgabe von Text verwenden.
Oder du solltest die Methode
Db.show(String ausgabe);
verwenden...
Die variable Db wird nie definiert...
Die Funktion Grösse und XIV sollten außerdem statt Strings boolean zurückgeben, damit die Mainmethode entsprechend erneut nach einer Eingabe fragen kann...
Du könntest wohl mit String.contains() 'rumbasteln, währe aber viel zu umständlich, da Du dann auf jedes andere Zeichen prüfen müsstest...
ich denke das einfachste ist eine for Schleife, mit der Du Zeichen für Zeichen testest, ob es X, I oder V ist...
String myString = "";
for(char c : myString.toUpperCase().toCharArray()){
switch(c){
case 'I':
case 'X':
case 'V':
break;
default:
// Ein anderer Buchstabe als I,V,X
break;
}
}
Wie wäre es mit einer for-Schleife für jeden Buchstaben, und dann eine if-Abfrage, ob das Zeichen eines deiner Vordefinierten ist? Wenn ja, wird es einem neuen String hinzugefügt. So hast du am Ende einen String nur mit den erlaubten Zeichen, die Restlichen fallen weg.
Am elegantesten sind dafür reguläre Ausdrücke.
Bin regelrecht noch Anfänger. Patterns kommen mir leider nicht bekannt vor..
Gibt es einen anderen Weg?