在这里,我正在寻找将解析字符串(左侧)并导致向量(右侧)的逻辑。 ' $'用作分隔符和' $'可能是例如价值的一部分。第二种模式" 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;
}
答案 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;
}
<强> 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, , ]