gpt4 book ai didi

java - 我如何使用 string#split 将字符串与分隔符 + - */( ) 和空格分开并将它们保留为额外的标记?

转载 作者:搜寻专家 更新时间:2023-10-31 20:29:05 24 4
gpt4 key购买 nike

我需要拆分包含基本数学表达式的字符串,例如:
"(a+b)*c"
或者
" (a - c) / d"
分隔符是 + - */( ) 和空格,我需要它们作为一个独立的标记。基本上结果应该是这样的:

"("
"a"
"+"
"b"
")"
"*"
"c"

第二个例子:

" "
"("
"a"
" "
"-"
...

我读了很多关于使用不太复杂的定界符的类似问题的问题,常见的答案是使用零空间正先行和 -behind。
像这样:(?<=X | ?=X)
X 代表分隔符,但将它们放在这样的类中:
[\\Q+-*()\\E/\\s]
未按预期方式工作。
那么我必须如何格式化分隔符才能使拆分按照我需要的方式工作?

---更新---
词类字符和较长的组合不应拆分。
例如“ab”“c1”或“12”。
或者简而言之,我需要与 StringTokenizer 相同的结果,给出参数“-+*/()”和 true。

最佳答案

尝试使用

拆分您的数据
yourString.split("(?<=[\\Q+-*()\\E/\\s])|(?=[\\Q+-*()\\E/\\s])(?<!^)"));

我假设您遇到的问题不在 \\Q+-*()\\E 中部分但在 (?<=X | ?=X) <- 应该是 (?<=X)|(?=X)因为它应该产生后视和前视。


演示 "_a+(ab-c1__)+12_" (顺便说一句,_ 将在代码中替换为空格。所以将两个空格显示为一个,因此不得不使用 __ 以某种方式呈现它们)

String[] tokens = " a+(ab-c1  )+12 "
.split("(?<=[\\Q+-*()\\E/\\s])|(?=[\\Q+-*()\\E/\\s])(?<!^)");
for (String token : tokens)
System.out.println("\"" + token + "\"");

结果

" "
"a"
"+"
"("
"ab"
"-"
"c1"
" "
" "
")"
"+"
"12"
" "

关于java - 我如何使用 string#split 将字符串与分隔符 + - */( ) 和空格分开并将它们保留为额外的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16610754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com