gpt4 book ai didi

Java - 如何获取字符串中所有出现的特定字符并将它们移动到非预定义位置?

转载 作者:行者123 更新时间:2023-11-30 10:45:49 25 4
gpt4 key购买 nike

我想将字符串中的“的立方根”和“平方根”分别替换为“^(1/3)”和“^(1/2)”,但在操作数之后。

做一个简单的替换会将“^(1/3)”和“^(1/2)”放在数字前面,但我需要它们在数字后面(我正在使用来自 exp4j 的 ExpressionBuilder API ,这需要这个)。

例如,给定这个字符串:

"cube root of 27 times cube root of 64 plus square root of 9 minus square root of 4"

我想把它转换成:

"27^(1/3)*64^(1/3)+9^(1/2)-4^(1/2)"

这是我的尝试:

String equation = "cube root of 27 times square root of 45";
String r1 = equation.replaceAll("cube root of", "◊").replaceAll("square root of", "√")
.replaceAll("times", "*").replaceAll("plus", "+").replaceAll("minus", "-")
.replaceAll("divided by", "/").replaceAll(" ", "");

System.out.println(r1);
String r2 = null;
if (r1.contains("◊"))
{
for (int i = r1.indexOf("◊")+1; i < r1.length(); i++)
{
if(Character.isDigit(r1.charAt(i)))
{

}
else
{
System.out.println("i: " + i);
r2 = r1.substring(r1.indexOf("◊")+1, i) + "^(1/3)" + r1.substring(i);
break;
}
}
}
System.out.println(r2);

我已经为“的立方根”替换了一个临时字符“◊”(写出整个短语很乏味),我已经让它为我工作,我得到的输出是:

◊27*√45
i: 3
27^(1/3)*√45

所以它只适用于一个“的立方根”短语,而不是两个,并且无法处理“平方根”短语(它不在代码中,但我尝试在第一个 if( ) 阻止我查看字符串是否包含“◊”符号。

我尝试在那个 if() block 中使用 OR r1.contains("√") 运算符,但它把我现有的代码搞砸了。我在网上到处寻找解决方案。我在我的程序中尝试过诸如 replaceCharAt(String s, int position, char c) 之类的方法来替换指定位置的字符,但我无法让它处理所有出现的指定短语。

我花了数周时间寻找解决方案,但找不到可以替换两个短语进行数学运算的解决方案。

如有任何帮助,我将不胜感激。

最佳答案

假设您想将“123 的立方根”转换为“123^(1/3)”等(您的问题不清楚),捕获操作数并使用反向引用:

equation = equation.replaceAll("cube root of (\\S+)", "$1^(1/3)")
.replaceAll("square root of (\\S+)", "$1^(1/2)")
.replace("times", "*").replace("plus", "+").replace("minus", "-")
.replace("divided by", "/").replace(" ", "");

请注意,对于非正则表达式替换,纯文本 replace() 就足够了(而且是首选)——它仍然会替换所有出现的地方,但不使用正则表达式。


部分测试代码:

String equation = "cube root of 8 times square root of 4 plus cube root of 27 minus 3";
equation = equation.replaceAll("cube root of (\\S+)", "$1^(1/3)")
.replaceAll("square root of (\\S+)", "$1^(1/2)")
.replace("times", "*").replace("plus", "+").replace("minus", "-")
.replace("divided by", "/").replace(" ", "");
System.out.println(equation);

输出:

8^(1/3)*4^(1/2)+27^(1/3)-3

关于Java - 如何获取字符串中所有出现的特定字符并将它们移动到非预定义位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36848387/

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