解析基于' $'的字符串,作为使用的字符串分隔符,可以用作值

时间:2016-05-24 06:13:24

标签: java

  1. " $ 1200〜$ $ 2000 AMOL" - > {$ 1200- $ 2000,amol}。
  2. " AMOL $$ 1200〜$ 2000" - > {AMOL,$ 1200〜2000年$}
  3. " AMOL $一二零零年至2000年" - > {AMOL,1200年至2000年}
  4. " AMOL $$ 1200〜$ $ 2000 patare" - > {AMOL,$ 1200〜$ 2000 patare}
  5. " AMOL $$ 1200〜$ $ 2000 patare $$ 12- $ 20#34; - > {AMOL,$ 1200〜$ 2000 patare,$ 12- $ 20}
  6. 在这里,我正在寻找将解析字符串(左侧)并导致向量(右侧)的逻辑。 ' $'用作分隔符和' $'可能是例如价值的一部分。第二种模式" amol $$ 1200- $ 2000"这里$是" amol"之间的分隔符。和" $ 1200- $ 2000"以及' $'是价值的一部分" $ 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;
    }
    

1 个答案:

答案 0 :(得分:0)

更新:已使用扩展的正则表达式更新答案,并将amol$$1200$patare映射到{amol,$1200,patare}作为comment中的请求。

您可以使用正则表达式执行此操作:

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

它说:首先尝试匹配$99-$99$99。匹配必须后跟$或字符串结尾 如果失败,请匹配任何不是$的字符的序列 同时匹配两个$之间或领先$之前或尾随$之后的空字符串。

在Java字符串文字中指定时,加倍\

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

请参阅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));
}

<强>输出

$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, , ]