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