【发布时间】:2016-08-19 07:19:42
【问题描述】:
我想将字符串中的“立方根”和“平方根”分别替换为“^(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() 块中使用 OR r1.contains("√") 运算符,但它把我现有的代码搞砸了。我在网上到处寻找解决方案。我在我的程序中尝试了诸如 replaceCharAt(String s, int position, char c) 之类的方法来替换指定位置的字符,但我无法让它适用于所有出现的指定短语。
我花了数周时间寻找解决方案,但我找不到一个可以替换两个短语来进行数学运算的解决方案。
我将非常感谢在此处发布的任何帮助。
【问题讨论】:
-
对于初学者,不要使用
replaceAll(),只需使用replace(),它仍然会替换所有出现的位置,但会进行纯文本替换(不是正则表达式替换) -
那么,你想让“27的立方根”变成“27^(1/3)”等等?
-
是的,这是我的意图。如果这句话是“27 的立方根乘以 64 的立方根的 9 的 4 的平方根”,我希望它被翻译成:“27^(1/3)*64^(1/3 )*9^(1/2)*4^(1/2). * 运算符可以是任何东西,例如 +、- 甚至 /
标签: java string replaceall charat mathematical-expressions