JAVA删除字符串中的最后一个“ *”

时间:2019-12-12 21:53:27

标签: java regex string

我只想删除字符串中的最后一个*。例如,abc*应该变成abcabc*d*d应该成为abc*dd

我检查了其他解决方案,发现:

parameter.replaceAll("a$", "b")

这将用“ b”代替最后的“ a”。但是,当我将其更改为此时,会显示错误:

parameter.replaceAll("*$", "b")

我也尝试过:

parameter.replaceAll("\\*$", "b")

4 个答案:

答案 0 :(得分:1)

parameter = parameter.replaceFirst("\\*$", "b");  // "aaa*" to "aaab"
parameter = parameter.replaceFirst("\\*([^*]*)$", "b$1"); // "aa*aa*aa" to "aa*aabaa"

答案 1 :(得分:1)

您可以使用lastIndexOf()substring()来代替性能高的正则表达式,以便在紧密循环中使用时获得更好的性能。

int idx = parameter.lastIndexOf('*');
if (idx != -1)
    parameter = parameter.substring(0, idx).concat(parameter.substring(idx + 1));

答案 2 :(得分:1)

在这里,您可以使用(.+)(最后一次出现)之前的贪婪*,它应该删除您想要的内容。例如:

(.+)\*(单击可在regex101上查看)

enter image description here

答案 3 :(得分:0)

parameter.replaceAll("[*]([^*]*)$", "$1")
//                    ^^^
//                     A ^^^^^^^
//                          B

匹配一个星号(A),然后匹配0个或多个非星号(B)。圆括号B表示该字符串被捕获为$1。替换字符串仅包含$1,这意味着星号实际上已被擦除。

确保将结果分配给变量,或将其打印出来。 replaceAll()未修改parameter;它返回修改后的字符串。