Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern

Diskutiere Input von zwei Koordinaten validieren und anschließend Werte speichern im Java Basics - Anfänger-Themen Bereich.
D

DagobertDuck

Hi,

ich versuche folgendes Pattern zu validieren und anschließend seine Werte zu speichern: "(<x-Koordinate>,<y-Koordinate>),(<x-Koordinate>,<y-Koordinate>)"

Folgendes habe ich bereits geschrieben:

Code:
private static final Pattern TWO_POINTS_PATTERN = Pattern.compile("\\(\\d+,\\d+\\),\\(\\d+,\\d+\\)");

public static String parseTwoPoints(final String input) throws BadSyntaxException {
    if (!TWO_POINTS_PATTERN.matcher(input).matches()) {
        throw new BadSyntaxException("two endpoints should be entered as following (<x-coordinate>,<y-coordinate>),(<x-coordinate>,<y-coordinate>).");
    }
    return input;
}

String endPointsStr = InputPattern.parseTwoPoints(args.get(2));

Damit wäre die Überprüfung der korrekten Syntax erledigt.

Jetzt muss ich allerdings irgendwie noch die vier Werte speichern (jeweils zwei):
Am Ende muss also irgendwie so etwas zustande kommen:

Point endPoint = new Point(Integer.parseInt(...]), Integer.parseInt(...));
Point secondEndPoint = new Point(Integer.parseInt(...), Integer.parseInt(...));


Beispiel für den Input (1,2),(3,4):
Point endPoint = new Point(1, 2);
Point secondEndPoint = new Point(3, 4);


Könnte mir jemand zeigen, wie ich am besten die vier Werte rausfiltern könnte?
 
looparda

looparda

Du könntest ein Paar von Punkten zurückgeben. Also
Java:
public static Pair<Point, Point> parseTwoPoints(final String input)
Java:
private static final Pattern TWO_POINTS_PATTERN = Pattern.compile("\\((\\d+),(\\d+)\\),\\((\\d+),(\\d+)\\)");

    public static Pair<Point, Point> parseTwoPoints(final String input) {

        final Matcher matcher = TWO_POINTS_PATTERN.matcher(input);
        if (matcher.matches()) {
            Point p1 = new Point(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)));
            Point p2 = new Point(Integer.parseInt(matcher.group(3)), Integer.parseInt(matcher.group(4)));
            return new Pair<>(p1, p2);
        } else {
            throw new IllegalArgumentException("two endpoints should be entered as following (<x-coordinate>,<y-coordinate>),(<x-coordinate>,<y-coordinate>).");
        }
    }
Der Regex ist leicht angepasst, sodass jede Zahl(en) eine group ist.
 
A

abc66

Java:
public static float[] g(String latitudeAndLongitude) {
	Pattern p = Pattern.compile("\\d+([.,]\\d+)?");
	Matcher m = p.matcher(latitudeAndLongitude);
	String a = null, b = null;
	if (m.find()) {
		a = m.group();
	}
	if (m.find()) {
		b = m.group();
	}
	if (a != null && b != null) {
		try {
			float c = Float.parseFloat(a.replace(',', '.'));
			float d = Float.parseFloat(b.replace(',', '.'));
			if (c >= -90 && c <= +90 && d >= -180 && d <= +180) {
				return new float[] { c, d };
			}
		} catch (NumberFormatException e) {
		}
	}
	return null;
}
 
D

DagobertDuck

Danke für die Hilfe. Leider ist die Methode parseTwoPoints in einer anderen Klasse. Daher müsste ich nach der Verifizierung irgendwie den String mit .split() oder .replace() aufteilen, sodass am Ende nur noch die vier Zahlen da sind und gespeichert werden können

Für den input (<x-Koordinate>,<y-Koordinate>) habe ich dies wie folgt gemacht:

Code:
String startPointStr = InputPattern.parsePoint(args.get(0));

String[] startCoords = startPointStr.substring(1, startPointStr.length() - 1).split(",");
Point startPoint = new Point(Integer.parseInt(startCoords[0]), Integer.parseInt(startCoords[1]));
Jetzt würde ich das gerne nach dem selben Schema machen, allerdings mit dem Input (<x-Koordinate>,<y-Koordinate>),(<x-Koordinate>,<y-Koordinate>).
 
Thema: 

Input von zwei Koordinaten validieren und anschließend Werte speichern

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben