Sortierung

Diskutiere Sortierung im Allgemeine Java-Themen Bereich.
N

nickiledeon

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"
"" -> "" , ""
 
L

LimDul

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

nickiledeon

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]
 
J

JustNobody

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

nickiledeon

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);
// }
}
}
 
J

JustNobody

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

nickiledeon

hm ehrlicherweise weiß ich nicht wie ich das umsetzten soll könntest du mir kurz helfen? :D
 
J

JustNobody

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);
    }
  }
}
 
Thema: 

Sortierung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben