TOTAL_QTY) , 1)" 我尝试使用以下代码拆分字符串: String[] token-6ren">
gpt4 book ai didi

java - 使用 String.split() 如何根据排除某个字符串的正则表达式拆分字符串

转载 作者:行者123 更新时间:2023-12-01 16:59:04 24 4
gpt4 key购买 nike

我有这个字符串:

"round((TOTAL_QTY * 100) / SUM(ORDER_ITEMS->TOTAL_QTY) , 1)"

我尝试使用以下代码拆分字符串:

String[] tokens = function.split("[ )(*+-/^!@#%&]");

结果是以下数组:

"round"
""
"TOTAL_QTY"
""
""
"100"
""
""
""
"SUM"
"ORDER_ITEMS"
"->TOTAL_QTY"
""
""
""
"1"

但我需要按如下方式拆分字符串:

"round",
"TOTAL_QTY",
"100",
"SUM",
"ORDER_ITEMS->TOTAL_QTY",
"1"

为了说得更清楚。首先,我需要在分割字符串时忽略 -> ,然后删除结果数组中的那些空字符串。

最佳答案

解决方案1

好吧,我认为你可以分两步完成,例如用空格替换所有非必要的字符,然后用空格分割,你的正则表达式可以如下所示:

[)(*+/^!@#%&,]|\\b-\\b

您的代码:

String[] tokens = function.replaceAll("[)(*+/^!@#%&,]|\\b-\\b", " ").split("\\s+");

请注意,我使用 \\b-\\b 仅替换 - :

解决方案2

或者如果你想要一些干净的东西,你可以像这样使用 Pattern 和 Matcher :

Pattern.compile("\\b\\w+->\\w+\\b|\\b\\w+\\b")
.matcher("round((TOTAL_QTY * 100) / SUM(ORDER_ITEMS->TOTAL_QTY) , 1)")
.results()
.map(MatchResult::group)
.forEach(s -> System.out.println(String.format("\"%s\"", s)));

regex demo

详情

  • \b\w+->\w+\b 匹配 ORDER_ITEMS->TOTAL_QTY 的特殊情况
  • |
  • \b\w+\b 任何其他有单词边界的单词

请注意,此解决方案适用于 Java9+,但您可以使用简单的模式和匹配器解决方案。

输出

"round"
"TOTAL_QTY"
"100"
"SUM"
"ORDER_ITEMS->TOTAL_QTY"
"1"

关于java - 使用 String.split() 如何根据排除某个字符串的正则表达式拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59808300/

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