我想做的是
str = "POW(MIN(100.21,123)*34,2)";
customSplit(str, string[] {"POW","MIN","(",")",",","*","+"});
结果:
POW
(
MIN
(
100.21
123
)
*
34
2
)
答案 0 :(得分:0)
为什么拆分POW和MIN?它们不仅仅是可以改变的操作名称吗?如果是这样,您可能会尝试仅拆分特殊字符,例如像这样:str.split("(?=[()*,+])|(?<=[()*,+])")
(当然可能有更多特殊字符,所以随意扩展这些类)
这使用零长度前瞻和后视,即它在这些字符类中的一个字符之前或之后分割,但不消耗字符。
答案 1 :(得分:0)
public static String[] customSplitter(String str, String[] delimiters) {
StringBuilder multisplitRegexBuff = new StringBuilder("(");
int c;
for (c = 0; c < delimiters.length - 1; c++) {
multisplitRegexBuff.append(Pattern.quote(delimiters[c])).append("|");
}
multisplitRegexBuff.append(Pattern.quote(delimiters[c])).append(")");
return str.replaceAll(multisplitRegexBuff.toString(), "\n$1\n").replaceAll("\n\n", "\n").split("\n");
}
解释:
customSplitter接受一个字符串和字符串[],algo的输出然后返回由输入字符串[]
的每个索引分隔的字符串[]customSplitter方法的最终结果类似于下面的例子
str.replaceAll("(POW|MIN|\\(|\\)|\\,|\\*|\\+)", "\n$1\n").replaceAll("\n\n", "\n").split("\n")'
Algo首先根据分隔符数组的索引构建模式,然后应用replaceAll和split。