2016-05-24 4 views
-6
  • "$ 1200- $ 2000 $ amol" -> {$ 1200- $ 2000, amol}.
  • "amol $$ 1200- $ 2000" -> {amol, $ 1200- $ 2000}.
  • "amol $ 1200-2000" -> {amol, 1200-2000}.
  • "amol $$ 1200- $ 2000 $ patare" -> {amol, $ 1200- $ 2000, patare}.
  • "amol $$ 1200- $ 2000 $ patare $$ 12- $ 20" -> {amol, $ 1200- $ 2000, patare, $ 12- $ 20}.
  • Hier bin ich auf der Suche nach der Logik, die die Zeichenfolge (linke Seite) analysieren und zu einem Vektor (rechte Seite) führen wird. '$' wird als Trennzeichen verwendet und '$' kann der Teil des Wertes für zB sein. zweites Muster "amol $$ 1200- $ 2000" hier $ ist seperator zwischen "amol" und "$ 1200- $ 2000" sowie $ ist der Teil des Wertes "$ 1200- $ 2000".

    private Vector getTockensForLovValue(String lovValue) //...where lovValue is the string to be parsed { 
    int beginIndex = 0; Vector vector = new Vector(); 
    
        while (beginIndex < lovValue.length()) 
        { 
         int dollarIndex = lovValue.indexOf("$", beginIndex); 
         if (dollarIndex != -1) 
         { 
          String s1 = lovValue.substring(beginIndex, dollarIndex); 
          vector.add(s1); 
          beginIndex = dollarIndex + 1; 
         } 
         else 
         { 
          vector.add(lovValue.substring(beginIndex)); 
          beginIndex = lovValue.length(); 
         } 
    
        } 
    
        return vector; 
    } 
    
    +0

    Sie alles versucht haben, dieses Problem zu lösen? –

    +0

    Ja, ich habe es versucht. Ich schrieb ein Programm geteilt unter .......... –

    +0

    Wie identifizieren Sie, ob ein Dollar Payload oder Separator ist? – Vampire

    Antwort

    0

    UPDATE: Die Antwort wurde mit einem erweiterten regex aktualisiert auch in commentamol$$1200$patare zu {amol,$1200,patare} als Anfrage abzubilden.

    Sie können einen regulären Ausdruck, dies zu tun verwenden:

    \$\d+(?:-\$\d+)?(?=\$|$)|[^$]+|(?<=^|\$)(?=\$|$) 
    

    Dort heißt es: Zuerst versuchen $99-$99 oder $99 anzupassen. Der Übereinstimmung muss $ oder Ende der Zeichenfolge folgen.
    Wenn dies fehlschlägt, passen Sie eine Sequenz eines beliebigen Zeichens an, das nicht $ ist.
    Passen Sie auch die leere Zeichenfolge zwischen zwei $ oder vor $ oder nach $.

    Wenn in einem Java-String-Literal angegeben, verdoppeln Sie die \.

    private static List<String> parse(String input) { 
        Pattern p = Pattern.compile("\\$\\d+(?:-\\$\\d+)?(?=\\$|$)|[^$]+|(?<=^|\\$)(?=\\$|$)"); 
        List<String> list = new ArrayList<>(); 
        for (Matcher m = p.matcher(input); m.find();) 
         list.add(m.group()); 
        return list; 
    } 
    

    Siehe regex101 for demo.

    TEST

    public static void main(String[] args) { 
        test("$1200-$2000$amol"); 
        test("amol$$1200-$2000"); 
        test("amol$1200-2000"); 
        test("amol$$1200-$2000$patare"); 
        test("amol$$1200-$2000$patare$$12-$20"); 
        test("amol$$1200$patare"); 
        test("$$$1200$$"); 
        test("$$$1200x$$"); 
    } 
    private static void test(String input) { 
        System.out.println(input + " --> " + parse(input)); 
    } 
    

    OUTPUT

    $1200-$2000$amol --> [$1200-$2000, amol] 
    amol$$1200-$2000 --> [amol, $1200-$2000] 
    amol$1200-2000 --> [amol, 1200-2000] 
    amol$$1200-$2000$patare --> [amol, $1200-$2000, patare] 
    amol$$1200-$2000$patare$$12-$20 --> [amol, $1200-$2000, patare, $12-$20] 
    amol$$1200$patare --> [amol, $1200, patare] 
    $$$1200$$ --> [, , $1200, , ] 
    $$$1200x$$ --> [, , , 1200x, , ] 
    
    +0

    test ("amol $$ 1200 $ patare"); für dieses Muster erwarte ich Wert als {amol, $ 1200, patare} –

    +0

    wir können Muster als Muster p = Pattern.compile ("\\ $ \\ d + - \\ $ \\ d + | \\ $ \\ d + | [^ $ |] + "); das wird den Fall abdecken, den ich oben erwähnt habe. –

    Verwandte Themen