Wörter und Zahlen nach speziellen Wörtern ausgeben

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

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.
 

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

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

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;
    }
 

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?
 

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
 

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

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
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
B String - Wörter finden, welches Punkt und entsprechender Pre / Suffix hat? Java Basics - Anfänger-Themen 30
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
CptK Datentypen Verdrehte Wörter wieder herstellen Java Basics - Anfänger-Themen 21
CptK 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
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
M negative Zahlen bei Intervallen Java Basics - Anfänger-Themen 10
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
M 3 Zahlen miteinander vergleichen Java Basics - Anfänger-Themen 18
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
J Operatoren Zahlen addieren Java Basics - Anfänger-Themen 13
B Threads Counter mit ungeraden Zahlen Java Basics - Anfänger-Themen 32
JavaBeginner22 Java 2 Zufalls zahlen generieren. Java Basics - Anfänger-Themen 11
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
sserio Befreundete Zahlen Java Basics - Anfänger-Themen 7
AhmadSlack Verzweigungen zahlen multiplizieren Java Basics - Anfänger-Themen 4
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
U Lotto-Zahlen App Java Basics - Anfänger-Themen 34
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
P Drei Zahlen eines Würfelspiels auswerten Java Basics - Anfänger-Themen 7
H Häufigkeit von Zahlen ermitteln Java Basics - Anfänger-Themen 23
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
H Zahlen kürzen Java Basics - Anfänger-Themen 2
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
B Häufigkeit einzelner Zahlen in einem Array Java Basics - Anfänger-Themen 6
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Eingegebene Zahlen mit Array ausgeben Java Basics - Anfänger-Themen 18
I 12 Spalten von jeweils 30 Zahlen in Konsole ausgeben Java Basics - Anfänger-Themen 6
R Array mit Unter- und Obergrenze ganze Zahlen dazwischen erscheinen nicht Java Basics - Anfänger-Themen 1
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
mhmt_03 dafür sorgen, dass im JTextfield nur zahlen eingebbar sind Java Basics - Anfänger-Themen 9
Ianatrix Zahlen von a bis b berechnen Java Basics - Anfänger-Themen 7
P Wie kann ich die Zahlen dieses Arrays dividieren? Java Basics - Anfänger-Themen 2
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

Ähnliche Java Themen

Neue Themen


Oben