Wörter und Zahlen nach speziellen Wörtern ausgeben

N

Noccctis

Mitglied
Guten Abend,

{"name": "Schal", "artnr": "1332", "preis":15}

Die grundlegende Idee war es aus solch aufgebauten Strings den Namen, die Artikelnummer und den Preis in verschieden Variablen abzuspeichern (Kann in unterschiedlicher Reihenfolge und mit unterschiedlich vielen Leerzeichen vorkommen).

Ich habe das ganze mit mehreren Tokenizern auf diesen Aufbau komprimiert:
name
Pullover
artnr1105
preis54

oder als String: namePulloverartnr1105preis54

Ich dachte das würde es vereinfachen, jedoch weiß ich leider immer noch nicht wie ich an die Kerninformation rankomme.

Also habt ihr eine Idee wie ich z.B. aus dem String : namePulloverartnr1105preis54 die Daten auslesen die ich benötige?
In dem Fall Pullover, 1105 und 54. Also jeweils nach name, artnr und preis. Es wäre einfacher wenn die Dinger immer die gleiche Position hätten
 
Robat

Robat

Top Contributor
Warum nutzt du nicht einfach eine JSON Library um deinen String zu parsen? Dann kannst du ganz einfach über `obj.getString("name")` an deine verschiedenen Werte kommen.
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Ich würde auch eine JSON Library verwenden. Ansonsten wäre es noch möglich sogenannte Look-Around Assertions (Regex) einzusetzen.
 
N

Noccctis

Mitglied
Ich darf leider kein JSON benutzen, da wir es noch nicht in der Vorlesung hatten. Ich habe jetzt eine Lösung gefunden, die aber eurer Meinung nach wahrscheinlich sehr unnötig und aufwendig ist, leider fiel mir nichts anderes ein.

Für alle anderen die vielleicht noch hier drauf kommen, hier meine Lösung:
Java:
    String m1 =  l.nextToken();
    String m2= l.nextToken();
    String m3 =l.nextToken();
    String m4 = l.nextToken();
    

   if(m1.equals("name")){
        name= m2;
        if(m3.substring(0,4).equals("artn")) {
            artnr=m3.substring(5,m3.length());
            preis=m4.substring(5,m4.length());
        }
        if(m3.substring(0,4).equals("prei")) {
            preis = m3.substring(5,m3.length());
            artnr=m4.substring(5,m4.length());;
            
        }
   }
  
    if(m1.substring(0,4).equals("artn")){
        artnr = m1;
        if(m2.substring(0,4).equals("prei")) {
            preis = m2.substring(5,m2.length());
            name = m4;
        }
        if(m2.equals("name")) {
            preis = m4.substring(5,m4.length());
            name=m3;
        }
   }
  
    if(m1.substring(0,4).equals("prei")){
        preis = m1;
        if(m2.substring(0,4).equals("artn")) {
            artnr = m2.substring(5,m2.length());
            name = m4;
        }
        if(m2.equals("name")) {
            artnr = m4.substring(5,m4.length());
            name=m3;
        }
   }
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Oder du hättest dir doch mal die Look-Around Assertions angeschaut.

Java:
public static void main(String args[]) {
    String json = "{\"name\": \"Schal\",   \"artnr\": \"1332\", \"preis\":15}";

    System.out.println(findValue(json, "name"));
    System.out.println(findValue(json, "artnr"));
    System.out.println(findValue(json, "preis"));
}

public static String findValue(String json, String name) {
    Pattern p = Pattern.compile("(?<=\\\"" + name + "\\\":\\s*)\\\"?\\w+\\\"?"); \\ ohne escapes: (?<="name":\s*)"?\w+"?
    Matcher m = p.matcher(json);
    return m.find() ? m.group() : null;
}

prints:
Code:
"Schal"
"1332"
15
 
Robat

Robat

Top Contributor
Man kann natürlich auch mit Splits arbeiten ..
Java:
    public static void main(String args[]) {
        java.util.Map<String, String> keyValuePairs = extractKeyValuePairs("{\"name\": \"Schal\", \"artnr\": \"1332\", \"preis\":15}");
        
      System.out.println(keyValuePairs.get("name"));
      System.out.println(keyValuePairs.get("artnr"));
    }
    
    private static java.util.Map<String, String> extractKeyValuePairs(final String json) {
        final java.util.Map<String, String> keyValuePairMap = new java.util.HashMap<>();
        final String data = json.substring(1, json.length()-1);
        for(String keyValuePair : data.split(",")) {
            String[] keyValuePairSplit = keyValuePair.split(":");
            if(keyValuePairSplit.length == 2) {
                keyValuePairMap.put(keyValuePairSplit[0].replaceAll("\"", "").trim(), keyValuePairSplit[1].replaceAll("\"", "").trim());
            }
        }
        return keyValuePairMap;
    }
 
N

Noccctis

Mitglied
Oder du hättest dir doch mal die Look-Around Assertions angeschaut.

Java:
public static void main(String args[]) {
    String json = "{\"name\": \"Schal\",   \"artnr\": \"1332\", \"preis\":15}";

    System.out.println(findValue(json, "name"));
    System.out.println(findValue(json, "artnr"));
    System.out.println(findValue(json, "preis"));
}

public static String findValue(String json, String name) {
    Pattern p = Pattern.compile("(?<=\\\"" + name + "\\\":\\s*)\\\"?\\w+\\\"?"); \\ ohne escapes: (?<="name":\s*)"?\w+"?
    Matcher m = p.matcher(json);
    return m.find() ? m.group() : null;
}

prints:
Code:
"Schal"
"1332"
15

Was genau muss ich alles importieren um json oder generell diesen Code so benutzen zu können?
 
N

Noccctis

Mitglied
Json ist nur eine Benennung in meinem Fall. Du brauchst dafür nur die 2 Klassen Pattern und Matcher. Look-Around Assertions sind nur Regex. Der reguläre Ausdruck geht auch noch besser, der hier ist quick&dirty, bringt aber das gewünschte Ergebnis.

Mir wird der Fehler:
java.util.regex.PatternSyntaxException: Look-behind group does not have an
obvious maximum length near index 15

ausgespuckt. Hab bei ("(?<=\\\"" + name + "\\\":\\s*)\\\"?\\w+\\\"?") das * bei s* entfernt, jedoch wird mir dann der dritte Wert (die 15) als null ausgegeben. Was mache ich falsch? Bei dir ging es doch
 
N

Noccctis

Mitglied
Java:
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class K2B01_Start {
    
  public static void main(String[] args) {
 
    Scanner sc = new Scanner(System.in);
    
    String json = "{\"name\": \"Schal\",   \"artnr\": \"1332\", \"preis\":15}";
    
    System.out.println(findValue(json, "name"));
    System.out.println(findValue(json, "artnr"));
    System.out.println(findValue(json, "preis"));
    


  }
 
 public static String findValue(String json, String name) {
    Pattern p = Pattern.compile("(?<=\\\"" + name + "\\\":\\s*)\\\"?\\w+\\\"?"); // ohne escapes: (?<="name":\s*)"?\w+"?
    Matcher m = p.matcher(json);
    return m.find() ? m.group() : null;
    }
}
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Hmmm, ja es ging bei mir. Vielleicht reagieren
Verschiedene Java Versionen anders darauf. Du könntest aber z.b. statt * die {0, 10} probieren. Das sind zwar nicht unbestimmt viele Leerzeichen, aber einige.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
UnknownInnocent Datentypen Verdrehte Wörter wieder herstellen Java Basics - Anfänger-Themen 21
UnknownInnocent Variablen Wörter erschließen Java Basics - Anfänger-Themen 7
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
Orkanson Methoden String in Wörter zerlegen und Endungen der Wörter überprüfen. Java Basics - Anfänger-Themen 4
JavaNewbie2.0 Tausende Wörter in Arrays automatisch einfügen Java Basics - Anfänger-Themen 10
B Collections Java Wörter in String zählen und geordnet ausgeben Java Basics - Anfänger-Themen 10
E Datei einlesen und bestimmte Wörter ausgeben Java Basics - Anfänger-Themen 2
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
A Wie am effizientesten bzw. schnellsten Namen/Wörter sortieren? Java Basics - Anfänger-Themen 1
I String teilen und zwei Wörter generieren Java Basics - Anfänger-Themen 1
A Text teilen und Wörter zählen Java Basics - Anfänger-Themen 7
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
T Eingegebene Wörter ausgeben? Java Basics - Anfänger-Themen 3
T Wörter mit @ als Zeichen finden Java Basics - Anfänger-Themen 13
J Alle Wörter der Länge n mit 0 und 1 Java Basics - Anfänger-Themen 17
G wörter speichern Java Basics - Anfänger-Themen 12
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
C Wörter aus einer txt datei lesen Java Basics - Anfänger-Themen 19
C String Arrays - häufigste Wörter Java Basics - Anfänger-Themen 10
T Erste Schritte Eingelesenen Satz - Wörter und Leerzeichen getrennt in 2x Array's Java Basics - Anfänger-Themen 7
B Input/Output Wörter zählen & sortieren Java Basics - Anfänger-Themen 9
S Buchstaben/Wörter im String zählen Java Basics - Anfänger-Themen 6
K Anzahl Wörter in Zeile Java Basics - Anfänger-Themen 24
F wörter trennen und in txt-file schreiben Java Basics - Anfänger-Themen 5
J Von einem String einzelne Wörter speichern Java Basics - Anfänger-Themen 6
R Wörter-KarteiSystem/Vokabel Trainer Source Fragen Java Basics - Anfänger-Themen 9
A Wörter umgekehrten Reihenfolge ausgeben Java Basics - Anfänger-Themen 3
J Wörter in einem string zählen und die anzahl zurückgeben Java Basics - Anfänger-Themen 4
P Zwei Wörter vergleichen Java Basics - Anfänger-Themen 11
S Wörter zählen Java Basics - Anfänger-Themen 19
N Wörter zählen im String Java Basics - Anfänger-Themen 3
Screen Wie lese ich Wörter ein? Java Basics - Anfänger-Themen 6
G Wörter Zählen Java Basics - Anfänger-Themen 11
J Wörter im String zählen Java Basics - Anfänger-Themen 4
P wörter im string zählen Java Basics - Anfänger-Themen 9
G Häufigkeit der Wörter einer Webseite zählen Java Basics - Anfänger-Themen 7
C Wörter suchen Java Basics - Anfänger-Themen 4
M Anzahl von Wörter in einer eingelesenen Datei Java Basics - Anfänger-Themen 10
S Regex, Wörter ersetzen Java Basics - Anfänger-Themen 2
S Welche Bedeutung haben diese Wörter? Java Basics - Anfänger-Themen 2
S Zeilen, Zeichen, Wörter Java Basics - Anfänger-Themen 3
K Wörter zählen auf Internetseiten... die zweite Java Basics - Anfänger-Themen 4
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
T Bestimmte Zahlen ausgeben mit einer whilfe Schleife Java Basics - Anfänger-Themen 21
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
L Mit Zahlen im String rechnen Java Basics - Anfänger-Themen 19
G Java eingelesene Zahlen Java Basics - Anfänger-Themen 2
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
H Ungerade Zahlen ausgeben von 1 bis 1000 Java Basics - Anfänger-Themen 8
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
V Erste Schritte Taschenrechner mit beliebig vielen Zahlen Java Basics - Anfänger-Themen 5
X Wie kann ich Zahlen in einzelne Zifferne zerlegen? Java Basics - Anfänger-Themen 3
J 10 positive Zahlen eingeben Java Basics - Anfänger-Themen 10
K Rechtsbündige Ausgabe von Zahlen Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
M Zahlen erraten Java Basics - Anfänger-Themen 7
E Zahlen von einem Array mit zahlen von zweitem Array vergleichen Java Basics - Anfänger-Themen 27
S Mit nextGaussian() positive Zahlen erzeugen? Java Basics - Anfänger-Themen 39
D auch negative Zahlen sotieren Java Basics - Anfänger-Themen 18
M Warum berechnet mein Primzahlenprog zu hohe Zahlen nicht? Java Basics - Anfänger-Themen 20
W Bell Zahlen Java Basics - Anfänger-Themen 2
H Min und Max von Zahlen Java Basics - Anfänger-Themen 10
der_Schokomuffin Fehler bei Zufallsgeneration von Zahlen Java Basics - Anfänger-Themen 7
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
F Abstand zum Durchschnitt von 5 Zahlen berechnen... Java Basics - Anfänger-Themen 16
Moji Klassen Array Zahlen zu Sternchen (U-Helmich 7.1-4) Java Basics - Anfänger-Themen 5
F Summe aller echten Teiler und Zahlen zurückgeben Java Basics - Anfänger-Themen 1
T Perfekte Zahlen ausgeben Java Basics - Anfänger-Themen 12
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
H Zahlen 1-100 Java Basics - Anfänger-Themen 2
H Einlesen von Zahlen Java Basics - Anfänger-Themen 20
O Problem gleiche Zahlen Java Basics - Anfänger-Themen 2
V Hilfe Aufgabe Zahlen Java Basics - Anfänger-Themen 9
J Zahlen addieren Java Basics - Anfänger-Themen 12
P Schlüsselworte Zählen und Zuweisen von eingelesenen Zahlen Java Basics - Anfänger-Themen 1
D Irgendwelche Ideen um Zahlen Reihenfolgen zu analyisieren Java Basics - Anfänger-Themen 16
UnknownInnocent Datentypen Zahlen Java Basics - Anfänger-Themen 2
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
Y kann jemand die Terme mit Zahlen schreiben ?? Java Basics - Anfänger-Themen 4
A Ein Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
E LMC (Assembler) Sortieren von 3 Zahlen Java Basics - Anfänger-Themen 4
x-tshainge Zahlen Buchstaben zuordnen Java Basics - Anfänger-Themen 4
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
S Sequenz von Zahlen bei einem Stack möglich oder nicht möglich? Java Basics - Anfänger-Themen 5
N Methoden zur Rekursion (catalansche Zahlen) Java Basics - Anfänger-Themen 4
W Wie ziehe ich positive ungerade Zahlen von meinem Hauptwert ab? Java Basics - Anfänger-Themen 17
N Java catalansche Zahlen (Rekursion) Java Basics - Anfänger-Themen 5
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
H Array mit Zahlen die durch 3 und 5 teilbar sind erstellen Java Basics - Anfänger-Themen 13
A Fibonacci Zahlen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Anzeige

Neue Themen


Oben