Sortierung

nickiledeon

Mitglied
hey ich habe eine frage,
ich würde das gerne verwirklichen habe aber leider gerade keinen ansatzpunkt
Also ich brauche eine Methode die folgendes macht:
- Hausnummern vom Hausnummernzusatz splitten

z.B.
"1" -> "1" , ""
"44" -> "44" , ""
"44a" -> "44" , "a"
"44banana" -> "44" , "banana"
"a" -> "" , "a"
"" -> "" , ""
 

LimDul

Top Contributor
Das ist ein hochgradig Komplexes Problem, weil es so viele verschiedene Format gibt.

Was machst du z.B. mit der Hausnummer 2-4? Was soll da rauskommen.

Das einfachste ist ein regulärer Ausdruck der Form ^([0-9]*)(.*)$ - allerdings wird es einige Konstellationen geben, die der nicht erkennen wird.
 

nickiledeon

Mitglied
es wäre immer eine [Zahl] [String]
Das ist ein hochgradig Komplexes Problem, weil es so viele verschiedene Format gibt.

Was machst du z.B. mit der Hausnummer 2-4? Was soll da rauskommen.

Das einfachste ist ein regulärer Ausdruck der Form ^([0-9]*)(.*)$ - allerdings wird es einige Konstellationen geben, die der nicht erkennen wird.

Also es ist immer [Zahl] [String]
 
K

kneitzel

Gast
Dann nimm den regulären Ausdruck von LimDul. Das deckt der Ausdruck mit ab. Erste matching Group hat die Zahl und die zweite hat den Rest.
 

nickiledeon

Mitglied
also so?



import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class AdressenZusatz{
public static void main(String []args){
Pattern pat = Pattern.compile("([0-9]+)([^0-9]*)");
Matcher mat = pat.matcher("5a-asd");
boolean pruefe = mat.matches(); // Zur Ueberpruefung ob ueberhaupt mind. ein Zahl eingegeben wurde
// mat.group(0) = 5a-asd

// if(pruefe){
int nummer = Integer.parseInt(mat.group(1));
String zusatz = mat.group(2);


System.out.println("Adressenummer: "+nummer);
System.out.println("Zusatz: "+zusatz);
// }
}
}
 
K

kneitzel

Gast
Im Prinzip ja so ich da jetzt nichts übersehen habe. Aber Du hast den regulären Ausdruck geändert.

Einer Deiner Fälle war:
"a" -> "" , "a"
Der wird nicht mehr erkannt, da Du mindestens eine Ziffer erwartest.

Und Dein Ausdruck verbietet Ziffern im zweiten Teil. Also sowas wie 3b17 wird nicht erkannt.

Bei LimDul ist es so, dass der erste Part alle Ziffern schluckt, die es ggf. gibt. So keine Ziffer da ist, ist es leer (und muss also abgefangen werden vor einem parse Aufruf!)
Und alles was danach kommt, wird dann als Anhang genommen - incl. Ziffern.
 
K

kneitzel

Gast
Bei was hast Du denn das Problem?

a) den regulären Ausdruck ersetzen durch den von LimDul gegebenen.
b) Die erste Gruppe erst prüfen, das sie auch nicht leer ist...

Ich habe das mal eingebaut und das in eine Methode test geschoben. Dann noch das "pruefe" rausgenommen, da wir den Wert ja nur einmal im if brauchen und das Ergebnis ist dann:
Java:
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class AdressenZusatz{

  public static void main(String []args) {
      test("5a-a5sd");
      test("a");
  }

  public static void test(final String value) {
    Pattern pat = Pattern.compile("^([0-9]*)(.*)$");
    Matcher mat = pat.matcher(value);
    
    if(mat.matches()) {
        if (mat.group(1).length() > 0) {
            int nummer = Integer.parseInt(mat.group(1));           
            System.out.println("Adressenummer: "+nummer);
        } else {
            System.out.println("Keine Adressenummer!");
        }

      String zusatz = mat.group(2);
      System.out.println("Zusatz: "+zusatz);
    }
  }
}
 

Ähnliche Java Themen

Neue Themen


Oben