如何在字符串数组分隔符中拆分字符串,在JAVA中保留分隔符

时间:2017-04-27 15:21:59

标签: java split delimiter

我想做的是

str = "POW(MIN(100.21,123)*34,2)";
customSplit(str, string[] {"POW","MIN","(",")",",","*","+"});

结果:

POW
(
MIN
(
100.21
123
)
*
34
2
)
  1. 分隔符不是char而是字符串
  2. 有多个分隔符
  3. 将分隔符保留为令牌

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。