Wertepaar in relulärem Ausdruck

Status
Nicht offen für weitere Antworten.

Marcel_Handball

Bekanntes Mitglied
Guten morgen zusammen,

Ich habe einen String, der aus mehreren Wertepaaren besteht (jeweils durch ein Sekikolon getrennt):

Java:
String s = "name1=value1; name2=value2";
(Nach dem letzten Paar steht kein Semikolon mehr)


Wie kann ich nun am einfachsten den Wert zu einem bestimmten Namen ermitteln?

Die einzige Möglichkeit, die mir einfiel, sieht ungefähr so aus:

Java:
Matcher matcher = Pattern.compile(name + "=.(;|\n)");
... um dann über matcher.start()/matcher.end() und name.length() den value zu erhalten.


Das scheint mir aber recht umständlich.
 

Sergeant_Pepper

Bekanntes Mitglied
Hallo...

deine Lösung sieht doch eigentlich schon recht kompakt aus...

Es gibt da noch die Klasse "Properties". Wenn man eine Datei hat, in der zeilenweise Paare "Schlüssel = Wert" stehen, kann man so eine Datei mit einem Rutsch in ein Properties-Objekt (abgeleitet von Hashtable) einlesen.
Allerdings kann diese Klasse wohl nicht mit einem solchen String wie bei dir umgehen.
Properties (Java 2 Platform SE 5.0)

Ist nicht ganz das was du suchst, aber vielleicht bringt es dich auf neue Gedanken.
 

Marcel_Handball

Bekanntes Mitglied
hey...

ich glaube am einfachsten wäre es vll doch mit Hilfe von String#split(";") den String erst einmal in die einzelnen paare zu zerlegen und dann über eine Schleife und startswith() das Array nach dem zu suchenen 'Name' ausfindig zu machen.
 

Sergeant_Pepper

Bekanntes Mitglied
Man könnte im String die ";" durch Zeilenwechsel ersetzen.

Dann müsste man den String umwandeln in einen "InputStream" (oder was davon abgeleitetes), und danach könnte man das Ding mit Properties.load(...) einlesen. Wenn ich nur wüsste, wie man einen String in einen InputStream umwandelt...
 

Sergeant_Pepper

Bekanntes Mitglied
Ich hab' das hier probiert:
Java:
package forum;
import java.io.*;
import java.util.Properties;

public class StringProps
{
    public static void main(String[] args)
    {
        String props = "key1=value 1; key2=value 2; key3=value 3";

        String lineProps = props.replace(";", "\n");

        byte[] bytes = lineProps.getBytes();

        InputStream is = new ByteArrayInputStream(bytes);

        Properties table = new Properties();
        try
        {
            table.load(is);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

        table.list(System.out);
    }
}
Das "byte[] bytes=lineProps.getBytes();" habe ich aus einem anderen Forum ge-googelt.

Edit: Listing formatiert und Werte mit Leerzeichen
 
Zuletzt bearbeitet:

Dissi

Aktives Mitglied
Java:
        Neuer Code weiter unten.

Ausgabe --> value1

Edit: gut / schlecht?
 
Zuletzt bearbeitet:

Sergeant_Pepper

Bekanntes Mitglied
Java:
        String s = "name1=value1; name2=value2";
        s = s.replaceAll(";","");
        String[] temp = s.split(" ");

Ausgabe --> value1

Da muss man aber vorsichtig sein, wenn die Werte Leerzeichen enthalten ...

Edit: habe mein Listing auf Werte mit Leerzeichen geändert.
 
Zuletzt bearbeitet:

Dissi

Aktives Mitglied
Ok einfache Lösung : )
Java:
        HashMap<String,String> results = new HashMap<String,String>();
        String s = "name1=value1; name2=value2";
        String[] temp = s.split("; ");

        for(String elem : temp){
            String[] tempo = elem.split("=");
            results.put(tempo[0], tempo[1]);
        }

        System.out.println(results.get("name1"));

--> value1

Da muss man aber vorsichtig sein, wenn die Werte Leerzeichen enthalten ...

Edit: habe mein Listing auf Werte mit Leerzeichen geändert.
Warte auf Pong : P
 
Zuletzt bearbeitet:

Sergeant_Pepper

Bekanntes Mitglied
Warte auf Pong : P

:) Ich habe deinen Code, ehrlich gesagt, nicht probiert. Mache das gerade so nebenbei... Sieht aber richtig aus.

Mir fiel die Lösung mit den Properties ein, weil sie auch Kommentare unterstützt, und auch robust bzgl. Leerzeichen ist. Auch wenn der Themenstarter diese Eigenschaften vielleicht nicht braucht.
 

Marcel_Handball

Bekanntes Mitglied
Ich freue mich über eure Vorschläge, und werde sie gleich mal ausprobieren und schauen, welche am schnellsten arbeitet.

Danke euch allen
 

Marcel_Handball

Bekanntes Mitglied
Da ich den ersten Namen und Wert immer auslesen muss und auch Werte ohne "=value" vorkommen können, würde sich die Lösung über die HashMap nicht lohnen (zumal ich dabei auch eine ArrayOutOfBounds abfagnen müsste.

Habs nun für meine Bedürfnisse so gelöst:

Java:
private static final Pattern valueSeparator = Pattern.compile(";( |\t)*");
....

String s = "name=value...";
String[] pairs = valueSeparator.split(s, 0);
if(pairs.length == 0){ throw new IllegalArgumentException("No valid cookie"); }
	
// Liefert den ersten Namen/Value	
int separator = pairs[0].indexOf('=');
setName(pairs[0].substring(0, separator));
setValue(pairs[0].substring(separator + 1, pairs[0].length()));

// Findet Value zu einem bestimmten Namen	
for(int i=1; i<pairs.length; i++){
	if(pairs[i].startsWith(searchName)){
		String s = pairs[i].substring( pairs[i].indexOf('=')+1 , pairs[i].length() );
			...
		break;
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Wertepaar in LinkedList/PriorityQueue speichern Allgemeine Java-Themen 3
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
G JavaFX var Ausdruck Allgemeine Java-Themen 1
S Hex Ausdruck kürzen Allgemeine Java-Themen 34
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
L Erste Schritte Ausdruck schöner schreiben? Allgemeine Java-Themen 8
J Frage zu regulärem Ausdruck Allgemeine Java-Themen 2
H Reg Exp Ausdruck erweitern Allgemeine Java-Themen 2
W Regulärer Ausdruck für 0 oder mehr Blanks Allgemeine Java-Themen 8
M Regulärer Ausdruck Allgemeine Java-Themen 3
A Bestimmte Sonderzeichen im Regulären Ausdruck Allgemeine Java-Themen 2
R Regulärer Ausdruck Allgemeine Java-Themen 5
G Regulärer Ausdruck für 2 Wörter Allgemeine Java-Themen 3
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
B Problem mit Regulärem Ausdruck Allgemeine Java-Themen 4
J RegEx Ausdruck Allgemeine Java-Themen 2
G RegEx- Ausdruck Allgemeine Java-Themen 4
L String Replace mit Regulärem Ausdruck Allgemeine Java-Themen 2
H Problem mit der Klasse Pattern - Regulärer Ausdruck Allgemeine Java-Themen 2
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
S Regulärer Ausdruck tut überhaupt nichts Allgemeine Java-Themen 2
M Regulärer Ausdruck Allgemeine Java-Themen 6
T Ausdruck mit pdfBox macht Probleme Allgemeine Java-Themen 2
M Ausgabe in Datei zum Ausdruck Allgemeine Java-Themen 2
Iron Monkey Regulärer Ausdruck Allgemeine Java-Themen 2
T Regulärer Ausdruck Allgemeine Java-Themen 6
S Regulärer Ausdruck für HTML-Tag Allgemeine Java-Themen 18
P [Regulärer Ausdruck] Auf Gruppe mit Quantifier separat zugreifen? Allgemeine Java-Themen 2
F Problem mit regulären Ausdruck in Zusammenhang mit HTML Allgemeine Java-Themen 8
J Regulärer Ausdruck - Der Punkt und der Zeilenumbruch Allgemeine Java-Themen 6
X String zerlegen mittels regulärem Ausdruck Allgemeine Java-Themen 31
Iron Monkey Regulärer Ausdruck Allgemeine Java-Themen 6
A Regulären Ausdruck für Funktionsnamen Allgemeine Java-Themen 4
A Regulärer Ausdruck für die Uhrzeit Allgemeine Java-Themen 3
G Regulärer Ausdruck Allgemeine Java-Themen 4
M Regulären Ausdruck negieren Allgemeine Java-Themen 6
G Frage zu Regulärem Ausdruck Allgemeine Java-Themen 2
S regex-Pattern Ausdruck negieren Allgemeine Java-Themen 2
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
M Regulärer Ausdruck Allgemeine Java-Themen 3
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
P Regulärer Ausdruck um sich wiederholende Zeichen zu finden. Allgemeine Java-Themen 9
M Regulärer Ausdruck mit [ und ] Allgemeine Java-Themen 9
P Problem - Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 5
J Regulärer Ausdruck Allgemeine Java-Themen 3
N Regulärer Ausdruck Allgemeine Java-Themen 2
X problem mit regulären ausdruck Allgemeine Java-Themen 3
F Problem mit regulärem Ausdruck Allgemeine Java-Themen 6
M Regulärer Ausdruck Allgemeine Java-Themen 2
M backreference im regulären ausdruck Allgemeine Java-Themen 9
A Probleme Umwandlung Ausdruck String in double Allgemeine Java-Themen 4
B regulärer ausdruck Allgemeine Java-Themen 9
P Dateinamen mit regulärem Ausdruck testen Allgemeine Java-Themen 9
T Einfacher regulärer Ausdruck Allgemeine Java-Themen 2
A Regulärer Ausdruck EMail-Prüfung Allgemeine Java-Themen 3
N Regulärer Ausdruck Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben