String a = "1+2cos(3)+2tan(4)+ln(3)";
String b = a.replaceAll("\) *(\w+)","*");
我希望我的字符串像
String a = "1+2*cos(3)+2*tan(4)+ln(3)" ;
答案 0 :(得分:3)
试试这个:
String b = a.replaceAll("(\d)([a-zA-Z])","$1*$2");
以上将查找字母表旁边的数字,然后使用捕获组将在两者之间插入*
。
答案 1 :(得分:1)
您可以使用肯定的lookbehinds and lookaheads:
String b = a.replaceAll("(?<=[0-9]+)(?=[a-z]+)", "*");
从正则表达式翻译成英文:在字符串中以数字开头并后跟字母的任何位置插入*
。
答案 2 :(得分:0)
你可以用这个:
String a = "1+2cos(3)+2tan(4)+ln(3)";
String b = "1+cos(3)+2tan(5)";
System.out.println(a.replaceAll("(\\d+)(cos|tan)","$1*$2"));
System.out.println(b.replaceAll("(\\d+)(cos|tan)","$1*$2"));
收率:
1+2*cos(3)+2*tan(4)+ln(3)
1+cos(3)+2*tan(5)
以上内容将匹配单词cos
或tan
后面的任何数字,并将其放入一个组中。然后,它会查找单词cos
或tan
(cos|tan
),并将它们放在一个组中(用圆括号表示)。完成后,它将替换所有数字实例,后跟cos
和tan
,其中包含匹配的数字,后跟*
,后跟匹配的任何项目。
答案 3 :(得分:0)
尝试,
String string1 = "1+2cos(30)+2tan(4)+ln(39)";
string1 = string1.replaceAll("([0-9]+)(cos|sin|tan|cot|ln|log)", "$1*$2");
System.out.println(string1);