String ab dem Wechsel Buchstaben zu Zahlen splitten

SAPUS619

Mitglied
Hallo Community,

ich suche zur Zeit eine Lösung um eine Adresse in Straße und Hausnummer zu splitten.

Als Beispiel sei gegeben:

Haupt Strasse 15b

Diese soll nun nach "Haupt Strasse " gesplittet werden, so das "15b" übrig bleibt.

Meine Lösung wäre:

String [] feld1 = LettersNumbers.split("[ .]");

String Ergebnis =feld1[feld1.length-1];

return Ergebnis;

Dies geht zwar, aber sobald der Fall vorliegt Haupt Strasse15b (Falsche Usereingabe, die abgefangen werden soll) geht das nicht mehr. Nun suche ich nach einer Funktion, die den String ab dem Wechsel zu Zahlen splittet.

Ausgeben möchte ich beide Teile des Strings.

Vielen Dank schonmal
 
Das geht mittels Regulärem Ausdruck (die java.lang.String.split(...) hast du ja schon gefunden);
ich persönlich steh' aber mit selbigen auf Kriegsfuß.
Eine sonstige fertige Methode kenn' ich nicht, müsste man wohl selbst programmieren.
 
Du sprichst von falschen Usereingaben die abgefangen werden soll. Spricht etwas dagegen das Feld in 2 aufzuteilen? Eines für die Straße/Platz/Gasse und eines für die Hausnummer?
 
Du könntest das Literal auch einfach auf Ziffern prüfen , und falls die aktuelle stelle eine Ziffer ist und kein Buchstabe, dann eben splitten , dann hast du das Problem mit der falschen Eingabe nicht, oder du sorgst nach Bestätigung der Eingabe selbst für die gewünschte Formatierung ( z.B durch hinzufügen eines Leerzeichens an gewünschter stelle) und parst dann erst die Eingabe.
 
Du könntest das Literal auch einfach auf Ziffern prüfen , und falls die aktuelle stelle eine Ziffer ist und kein Buchstabe, dann eben splitten , dann hast du das Problem mit der falschen Eingabe nicht, oder du sorgst nach Bestätigung der Eingabe selbst für die gewünschte Formatierung ( z.B durch hinzufügen eines Leerzeichens an gewünschter stelle) und parst dann erst die Eingabe.

Ja genau so hatte ich mir das auch gedacht, aber wie überprüfe ich auf eine Ziffer ?
 
ginge natürlich auch einfach mit einer verschachtelten-for schleife , und einem Referenz-char-Array, welches die zu prüfenden Ziffern enthält 😉


die Klasse Character 🙂

Die Methode sollte demnach isDigit(char c) sein.
 
Zuletzt bearbeitet:
Java:
for ( int i = 0; i < LettersNumbers.length(); i++ )      
if (Character.isDigit(LettersNumbers.charAt( i ) ) ){
String Ergebnis = LettersNumbers.substring(i); 
}
return Ergebnis;

Leider tritt hier ein Fehler auf...
 
Zuletzt bearbeitet von einem Moderator:
Bitte verwende für Java Code in Zukunft die Java-Tags 🙂

Es wäre nett wenn du uns auch sagst was für ein Fehler auftritt 🙂
 
Hier mal unter verwendung eines Stringbuilders als Beispiel, ginge auch mit einem StringTokenizer oder oder oder :rtfm:

Java:
public class Foo{
	
	public static String checkForDigit(String input){
		char[] in = input.toCharArray();
		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < in.length; i++) {
			if(Character.isDigit(in[i])) {
				builder.append(in[i]);
			}
		}
		return builder.toString();
	}
	
	public static void main(String[] args){
		System.out.println(Foo.checkForDigit("Ich bin ein toller input mit Ziffern234234"));
	}
}
 
Zuletzt bearbeitet:
Hier mal unter verwendung eines Stringbuilders als Beispiel, ginge auch mit einem StringTokenizer oder oder oder :rtfm:

Java:
public class Foo{
	
	public static String checkForDigit(String input){
		char[] in = input.toCharArray();
		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < in.length; i++) {
			if(Character.isDigit(in[i])) {
				builder.append(in[i]);
			}
		}
		return builder.toString();
	}
	
	public static void main(String[] args){
		System.out.println(Foo.checkForDigit("Ich bin ein toller input mit Ziffern234234"));
	}
}


Perfekt ! Vielen Dank !
 
Ah Moment ... der Buchstabe der Hausnummer wird so auch abgeschnitten ...
selbstverständlich, diesen musst du separat parsen, die Methode war nur dafür gedacht die Ziffer rauszuschneiden.
😉

guckst du hier :

Java:
public class Foo{

	public static String parseHouseNumber(String input){
		
		for (int i = 0; i < input.length(); i++) {
			if(Character.isDigit(input.charAt(i))) {
				return input.substring(i, input.length());
			}
		}
		return input;
	}
	
	public static void main(String[] args){
		System.out.println(Foo.parseHouseNumber("Störtebeckerstr.1253a"));
		System.out.println(Foo.parseHouseNumber("Wedemweg245c"));
	}
}

Output :

Code:
1253a
245c

Solch eine statische hilfsmethode könntest du dann einfach deiner relevanten methode vorschalten.

oder sowas wenn du ein array mit den Daten haben möchtest:

Java:
	public static String[] parse(String input){
		
		String[] output = new String[2];
		for (int i = 0; i < input.length(); i++) {
			if(Character.isDigit(input.charAt(i))) {
				output[0] = input.substring(0, i);
				output[1] = input.substring(i, input.length());
				return output;
			}
		}
		return new String[0];
		
	}

den output kannst du dann so testen :
Java:
		String[] address = Foo.parse("Neuer Weg 123a");
		
		for (int i = 0; i < address.length; i++) {
			System.out.println(address[i]);
		}
	}

uncool ist dann nur wenn sich der DAU dann innerhalb des Straßennamens verschreibt :lol:
 
Zuletzt bearbeitet:
Hi,
Hier mal ein Beispiel mit Regex:
passt für: Haupt Strasse 15b, Haupt Strasse 15b, Haupt Strasse15b
Java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {
    public static void main(String[] args) {
        String adress = "Haupt Strasse  15b";
        String regex = "\\d.*";
        Pattern r = Pattern.compile(regex);
        Matcher m = r.matcher(adress);
        if(m.find()) {
            System.out.println(m.group(0));
        }    
    }
}
 

Zurück
Oben