【问题标题】:How can I split string with string array delimiters, keeping delimiter in JAVA如何使用字符串数组分隔符拆分字符串,在 JAVA 中保留分隔符
【发布时间】:2017-04-27 15:21:58
【问题描述】:

我想做的是

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

结果:

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

【问题讨论】:

  • 您需要一个稳健的解决方案还是 POW(MIN(double,int)*int,int) 永远是这样?
  • 到目前为止你尝试了什么?你遇到问题了吗?
  • 因为我需要使用变量作为数字。例如“MIN(VAL1,VAL2)”。在标记化之后,我将得到计算的变量值。
  • 你的代码是什么?你的实际结果是什么?您的预期结果是什么?
  • 对不起.. 我错了。我不需要 POW、MIN 作为分隔符............我只是有运算符数组(包括 *、-、/、POW、MIN、SIN 等),我认为可以用作分隔符。但是你们是对的。用 *() 分割就够了

标签: java split delimiter


【解决方案1】:

为什么要拆分 POW 和 MIN?它们不只是可以更改的操作名称吗?如果是这样,您可能会尝试仅拆分特殊字符,例如像这样:str.split("(?=[()*,+])|(?<=[()*,+])")(当然可能还有很多特殊字符,所以请随意扩展这些类)

这利用了零长度的前瞻和后瞻,即它在这些字符类中的一个字符之前或之后分割,但不消耗这些字符。

【讨论】:

  • @ΦXocę웃Пepeúpaツ 我在问题中看不到任何内容;)-无论如何,如果字符类不完整,就像问题不完整一样;)
【解决方案2】:
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 接受一个字符串和 string[],然后 algo 的输出返回由输入 string[] 的每个索引分隔的 string[]

customSplitter 方法的最终结果类似于下面的例子

str.replaceAll("(POW|MIN|\\(|\\)|\\,|\\*|\\+)", "\n$1\n").replaceAll("\n\n", "\n").split("\n")'

算法首先根据分隔符数组的索引构建模式,然后应用replaceAll和split。

【讨论】:

  • 阅读问题,这家伙想要一个接受字符串和字符串 [] 的算法,算法的输出应返回字符串 [],并以输入字符串 [] 的每个索引分隔,给出的答案正是那。如果你想了解算法是如何工作的,你应该礼貌地提问,而不是通过判断性陈述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多