如何在没有冲突的情况下以更智能的方式做到这一点?

时间:2018-04-12 06:24:48

标签: java regex split automaton

通过这种方式,它返回了一些错误,似乎主要的例子是2个字符的字符,例如“++”被“#++#”取代,而接近将All()替换为“## + ## + ##”。

return lexeme.replaceAll(
        "==", "#==#"
    ).replaceAll(
        "&&", "#&&#"
    ).replaceAll(
        "=", "#=#"
    ).replaceAll(
        ">", "#>#"
    ).replaceAll(
        "++", "#++#"
    ).replaceAll(
        "<=", "#<=#"
    ).replaceAll(
        "!", "#!#"
    ).replaceAll(
        "-", "#-#"
    ).replaceAll(
        "--", "#--#"
    ).replaceAll(
        "+", "#+#"
    ).replaceAll(
        "+=", "#+=#"
    ).replaceAll(
        "*", "#*#"
    ).replaceAll(
        ",", "#,#"
    ).replaceAll(
        ".", "#.#"
    ).replaceAll(
        "[", "#[#"
    ).replaceAll(
        "{", "#{#"
    ).replaceAll(
        "(", "#(#"
    ).replaceAll(
        ")", "#)#"
    ).replaceAll(
        "}", "#}#"
    ).replaceAll(
        "]", "#]#"
    ).split( "#");
}

1 个答案:

答案 0 :(得分:1)

主要的正确性问题可能是您在之前的替换结果上调用replaceAll(),因此例如==首先被#==#替换为==目标为##=##=##,然后定位到=,原因是替换定位+=

此外,您的方法无法确保选择最长的匹配目标/针,因此+#=#会被#+##=#替换为+=,然后再到if (data instanceof File) {} ,直到达到{{1}目标。