gpt4 book ai didi

java - 重写字符串的部分内容

转载 作者:行者123 更新时间:2023-12-01 06:18:16 26 4
gpt4 key购买 nike

我有一个想要重写的字符串。该字符串包含看起来像“DDT”加四位数字的子字符串。我将调用这些 block 。它还包含“&”和“|”等连接词,其中|代表“或”,以及括号。

现在我想重写这个字符串,使得由 &s 分隔的 block 应写为“min(x(block1), x(block2), etc.)”,而由 |s 分隔的 block 应写为“max(x( block 1)、x( block 2)等)”。

查看示例应该会有所帮助:

public class test{



public static void main(String[] arg) throws Exception {


String str = "(DDT1453 & DDT1454) | (DDT3524 & DDT3523 & DDT3522 & DDT3520)";

System.out.println(str.replaceAll("DDT\\d+","x($0)"));

}

}

我想要的输出是:

max(min(x(DDT1453),x(DDT1454)),min(x(DDT3524),x(DDT3523),x(DDT3522),x(DDT3520)))

如您所见,我执行了初始替换以包含输出的 x(block) 部分,但我无法获取其余部分。关于如何实现我想要的输出有什么想法吗?

最佳答案

仅仅进行字符串替换是错误的方法。使用递归下降解析代替

首先,您要定义哪些符号创建什么,例如:

program -> LiteralArg|fn(x)|program

LiteralArg -> LiteralArg

LiteralArg&LiteralArg -> fn(LiteralArg) & fn'(LiteralArg)

fn(x) -> fn(x)

fn(x) |fn(y) -> fn(x),fn(y)

从那里你创建函数,它将递归地解析你的数据,期望某些事情发生。例如

 String finalResult = "";
function parse(baseString) {
if(basestring.isLiteralArg)
{
if(peekAheadToCheckForAmpersand())
{
expectAnotherLiteralArgAfterAmpersandOtherwiseThrowError();
finalResult += fn(LiteralArg) & fn'(LiteralArg)
parse(baseString - recentToken);
}
else
{
finalResult += literalArg;
parse(baseString - recentToken);
}
}
else if(baseString.isFunction()
{
if(peekAheadToCheckForPipe())
{
expectAnotherFunctionAfterAmpersandOtherwiseThrowError();
finalResult += fn(x),fn(y)
parse(baseString - recentToken);
}
else
{
finalResult += fn(x)
parse(baseString - recentToken);
}
}

}

当您找到标记时,将它们从字符串中取出并对剩余的字符串调用解析函数。

我基于几年前做的一个项目的粗略示例。以下是相关讲座: http://faculty.ycp.edu/~dhovemey/fall2009/cs340/lecture/lecture7.html

关于java - 重写字符串的部分内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18322330/

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