gpt4 book ai didi

java - 有没有办法在 Java 正则表达式中包含 DOT 但不包含双整数?

转载 作者:行者123 更新时间:2023-11-30 05:24:36 24 4
gpt4 key购买 nike

我有

String prog = "public class HelloWorld {\n" + "public static void main.(String[] args) int b = 0.5 \n"

(这里字符串中main后面的点(.)是有目的的)

这里我需要将字符串作为一个整体分成以下组件 -

  1. 公开
  2. 类(class)
  3. Hello World
  4. {
  5. 公开
  6. 静态
  7. 无效
  8. 主要
  9. .
  10. (
  11. 字符串
  12. [
  13. ]
  14. 参数
  15. )
  16. 整数
  17. b
  18. =
  19. 0.5

数字和 .仅供引用(即 1. 、 2. 、 11. )。输出必须是组件

我用过split()使用\\s+ 并向前看和向后看符号的断言:-
(+-*/[);]。

String[] words = prog.split("\\\s+|((?<=])|(?=]))|((?<=\\[)|(?=\\[))|((?<=\\()|(?=\\())|((?<=\\))|(?=\\)))|((?<=[-+*/=;.])|(?=[-+*/=;.]))");

请原谅复杂性。任何压缩将不胜感激。

它可以很好地提供组件,但是在尝试拆分 main 时。进入 main 和 .在保持 0.5 不变的同时,我使用的表达式 ((?<=[-+/=;.])|(?=[-+/=;.])) 不起作用。

它分隔了 main.进入 main 和 .但也有 0.5 到 0 和 .和5

我需要 0.5 保持为 0.5 ,即 double 保留为 double,同时拆分 main。进入 main 和 .

请向我提供一个正则表达式,以将句点与字符串分隔开,但将双整数保持不变。

最佳答案

通过使用具有以下模式的正式正则表达式模式匹配器,我能够接近您的预期输出:

[\\[\\]{}()+/*-]|[^\\s\\[\\]{}()+/*-]+

此模式要么匹配单个符号 []{}()+/*-,要么匹配非符号字符(也不是空白字符)零次或多次。

String prog = "public class HelloWorld {\n" + "public static void main(String[] args) int b = 0.5 \n";
String pattern = "[\\[\\]{}()+/*-]|[^\\s\\[\\]{}()+/*-]+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(prog);
while (m.find()) {
System.out.println(m.group());
}

打印:

public
class
HelloWorld
{
public
static
void
main
(
String
[
]
args
)
int
b
=
0.5

请注意,解决此问题的最佳方法可能是编写某种 Java 解析器,它可以根据需要梳理组件。我的解决方案很容易无法在其他 Java 片段上运行。

关于java - 有没有办法在 Java 正则表达式中包含 DOT 但不包含双整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58918577/

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