我有
String prog = "public class HelloWorld {n" + "public static void main.(String[] args) int b = 0.5 n"
(这里字符串中main后面的点(.(是有目的的(
在这里,我需要将字符串作为一个整体分离为以下组件-
- 公共
- 类
- HelloWorld
- {
- 公众
- 静态的
- 无效
- 主要
- (
- 字符串
- [
- ]
- args
- )
- int
- b
- =
- 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*$/