Java String darf nur bestimmte Buchstaben enthalten?

6 Antworten

Du könntest ein Pattern erzeugen und dann die Methode

boolean match(String pattern,CharSequence input);

darauf anwenden...

rekitamrofni 
Fragesteller
 14.04.2018, 14:10

Bin regelrecht noch Anfänger. Patterns kommen mir leider nicht bekannt vor..

Gibt es einen anderen Weg?

0
Destranix  14.04.2018, 14:17
@rekitamrofni

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;
}
1
rekitamrofni 
Fragesteller
 14.04.2018, 15:21
@Destranix

Würdest du meinen Quellcode kurz anschauen? Er scheint nicht so zu funktionieren, wie er es soll

0
Destranix  14.04.2018, 15:22
@rekitamrofni

Klar...

Stell ihn einfach hier rein, oder verlink ihn extern auf pastebins, etc.

0
rekitamrofni 
Fragesteller
 14.04.2018, 15:33
@Destranix

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....

0
Destranix  14.04.2018, 15:46
@rekitamrofni

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...

0

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.