Java 如何拆分而不是在所有字符上拆分
我有一个字符串,看起来像:Java 如何拆分而不是在所有字符上拆分,java,Java,我有一个字符串,看起来像:string s=“date1,calculatedDate(currentDate,35),false” 我需要提取verify函数的所有参数。因此,预期结果应该是: elem[0] = date1 elem[1] = calculatedDate(currentDate, 35) elem[2] = false 如果我在上使用split函数,char,但我得到了以下结果: elem[0] = date1 elem[1] = calculatedDate(curre
string s=“date1,calculatedDate(currentDate,35),false”代码>
我需要提取verify
函数的所有参数。因此,预期结果应该是:
elem[0] = date1
elem[1] = calculatedDate(currentDate, 35)
elem[2] = false
如果我在上使用split
函数,
char,但我得到了以下结果:
elem[0] = date1
elem[1] = calculatedDate(currentDate
elem[2] = 35)
elem[3] = false
此外,该方法必须是通用的,因为有些函数有2个或7个参数
你有什么办法帮我吗?试试这个:
String s = "verify(date1, calculatedDate(currentDate, 35), false)";
Pattern p = Pattern.compile("(?<=verify\\()(\\w+)(,\\s)(.*)(,\\s)((?<=,\\s)\\w+)(?=\\))");
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group(1) + "\n" + m.group(3) + "\n" + m.group(5));
}
输出:
date1
calculatedDate(currentDate, 35)
false
关于正则表达式:
(\\w+)
一个或多个(+)字字符
(,\\s)
,
部分
(.*)
匹配任何字符,这里只匹配两个,
(,\\s)
,
部分
((?可用于解析括号内的参数:
最终静态字符串分隔符=“,”;
最终静态字符串括号_START=“(”;
最终静态字符串括号_END=“)”;
公共静态列表参数(字符串文本){
列表参数=新的ArrayList();
StringBuilder argParsed=新建StringBuilder();
StringTokenizer st=新的StringTokenizer(文本,分隔符);
而(st.hasMoreElements()){
//默认值:添加下一个令牌
字符串标记=st.nextToken();
System.out.println(“令牌:+Token”);
argParsed.append(标记);
//如果令牌包含“(”我们有
//作为参数的表达式或嵌套调用
if(标记.包含(括号\开始)){
System.out.println(“嵌套表达式,以“+token”开头);
//重建到字符串生成器,直到“')”
while(st.hasMoreElements()&&!token.contains(括号)){
//添加消除/标记化分隔符
argParsed.append(分隔符);
//默认值:添加下一个令牌
token=st.nextToken();
System.out.println(“嵌套表达式内的令牌:“+Token”);
argParsed.append(标记);
}
System.out.println(“以“+token”结尾的嵌套表达式);
}
//添加完整参数并重新开始
arguments.add(argParsed.toString());
argParsed.setLength(0);
}
返回参数;
}
它甚至可以解析以下输入:date1,calculatedDate(currentDate,35),false,(a+b),x.toString()
成功地找到了所有5个参数,包括复杂参数:
- (嵌套)函数调用,如
calculatedDate(currentDate,35)
- 像
(a+b)
- 方法调用对象,如
x.toString()
运行这个
多读多扩展
将来可能会有更复杂的文本或语法需要处理。
如果不是<强>正则表达式捕获< <强>,也不是<强>字符串分裂< /强>,也不是<强>标记化< /强>可以解决,请考虑使用或生成<强>或分析器< /强>。参见关于.< /P>的讨论。这只是一个例子,但你也可以有文字串吗?复杂表达式?问题是完全清楚的并且显示自己的A。ttempt,虽然没有。请详细介绍上下文和用法:是否还要分析更多函数调用或其他语法?哪种源语言(即verfiy
函数)?@Royce请回答您的问题,包括更多具有简单和复杂结构的示例输入数据,以了解输入是什么。这可能会朝“解析”输入字符串的方向发展,但可能不容易做到。您从何处获取字符串?可能这是一个“XY问题”并且可以在其他地方更容易地解决。@Royce请告诉我们:函数调用来自何处(上下文)以及它们是哪种语言(Javascript、SQL)?许多特殊的库都是为这种解析而设计的。正则表达式或字符串操作可能不够合适:-(谢谢。我编辑了我的问题。事实上,我不需要解析验证
,只需要解析参数。请调整您的答案好吗?没有指定答案,但解析或多或少的参数时会发生什么,如date1,calculatedDate(currentDate,35),false,true
?是否全部捕获?是的,必须捕获所有参数。即使有2个或7个参数。我用这些信息编辑了。非常感谢。这正是我需要的!
date1
calculatedDate(currentDate, 35)
false