有没有一种方法可以在Java Regex中包含DOT而不是双整数



我有

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

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

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

  1. 公共
  2. HelloWorld
  3. {
  4. 公众
  5. 静态的
  6. 无效
  7. 主要
  8. (
  9. 字符串
  10. [
  11. ]
  12. args
  13. )
  14. int
  15. b
  16. =
  17. 0.5

数字和。仅用于参考(即1,2.、11.(。输出必须是组件

我已经将split()与\\s+一起使用,并向前看&在断言后面查找符号:-
(+-*/[(;]。

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

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

提供组件非常好,但在尝试拆分main时。分为主和。在保持0.5不变的情况下,我使用的表达式((?<=[-+/=;.](|(?=[-+>/=;]](不起作用。

它将主管道分开。分为主和。但也可以是0.5至0和。和5

我需要0.5才能保持为0.5,即double保留为double,同时拆分main。分为主和。

请给我提供一个正则表达式,用字符串分隔句点,但要保持双整数不变。

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

[\[\]{}()+/*-]|[^\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代码段上工作。

要匹配文字点,需要对其进行转义,因此.对于0.5,您可以使用此

/^d*.?d*$/

最新更新