Zeichen in einem String zwischen 2 festgelegten Zeichen auslesen



  • Hallo allerseits!
    Ich bin gerade auf der Suche nach einer guten Lösung für folgendes Problem. Und zwar habe ich beilspielsweise folgenden String

    ...
    String str="[Das ist ein Text]";
    ...
    

    Meine Frage ist nun ob es eine elegante Möglichkeit gibt, den Inhalt zwischen dem '[' und dem ']' Zeichen herauszulesen und in einem anderen String zu Speichern?
    Ich habe zwar bereits nach Methoden bzw Funktionen gesucht aber keine gefunden welche dafür nach meiner Meinung gut geeignet wäre. Mir ist nur eingefallen mit einer for-Schleife das ganze zu Durchlaufen aber das finde ich ist nicht das wahre. Danke für eure Antworten 🙂



  • Gib mal eine genaue Definition wie dein String aussieht, geht da auch

    "foo[]test" = ""
    "bar[1]foo2[2]bar" = "1" ? oder "2" ?

    Ist [ immer das erste Zeichen und ] immer das letzte Zeichen kannst du einfach substring bemühen:

    str.substring(1, str.length()-2);
    

    MfG SideWinder



  • Der String sieht normalerweise immer so aus

    String = "[NACHRICHT]+[55]+[unbekanter String]";
    

    ich möchte nur das was in der 2 Klammer also eine 2 stellige Zahl auslesen und den String in der 3 Klammer welcher aber eine variable Länge hat



  • Entweder du suchst manuell, oder du verwendest RegularExpressions und erstellst dir via Pattern.matcher() einen Matcher. Das 2. und das 3. gefundene Exemplar ist dann das Deinige 🙂

    http://www.regular-expressions.info/java.html

    MfG SideWinder



  • regex für jemand der keine idee hat wie es überhaupt zu lösen sein könnte...?
    Ich glaub das ist nicht ganz so leicht.

    String s = "[NACHRICHT]+[55]+[unbekanter String]";
    Wenn dein String tatsächlich so aussieht kannst den auch mit s.split"]+[" auftrennen... Dann hast die Zahl schon mal einzelnd. Und vom dritten teil musst du nurnoch das letzte Zeichen abschneiden...



  • split() nimmt auch eine RegEx, dementsprechend wird ]\+[ nötig sein, oder, da bin ich mir aber nicht sicher, sogar ]\+[

    MfG SideWinder



  • String s = "[NACHRICHT]+[55]+[unbekanter String]";
    String zwei[] = s.split("\]\+\[");
    System.out.println(zwei.length);



  • Ungetestest:

    String str = "[NACHRICHT]+[55]+[unbekanter String]";
    
    Pattern p = Pattern.compile("\[.*?\]");
    Matcher m = p.matcher(str);
    
    while(m.find())
    {
       // hier kommt nach der reihe [NACHRICHT] dann [55] dann [unbekannter String]
       // durch m.start() und m.end()
    }
    

    Edit: Wenn deine Strings nie aus mehr "Feldern" bestehen werden, dann ist die Variante von Sqwan wahrscheinlich einfacher.

    MfG SideWinder



  • geht nicht. Invalid escape sequence



  • Sqwan schrieb:

    geht nicht. Invalid escape sequence

    Hab doch nur vergessen die \ doppelt zu machen. Darauf hätte auch der OP kommen können 🙂

    MfG SideWinder



  • String str = "[NACHRICHT]+[55]+[unbekanter String]";

    Pattern p = Pattern.compile("\[.*?]");
    Matcher m = p.matcher(str);
    String zeile;

    while(m.find())
    {
    System.out.println(m.start()+" : "+m.end());
    // hier kommt nach der reihe [NACHRICHT] dann [55] dann [unbekannter String]
    // durch m.start() und m.end()
    }

    So läuft es bei mir...

    EDIT: Was mich ein wenig wundert ^^ wegen der eckigen klammern
    EDIT2:
    0 : 11
    12 : 16
    17 : 36 ausgabe



  • Wenn schon regex, warum dann nicht auch capturing groups verwenden?


Anmelden zum Antworten