我想用美元符号替换以下字符串中的最后一个点,我该怎么做?
de.java_chess.javaChess.game.GameImpl.GameStatus
我想要使用de.java_chess.javaChess.game.GameImpl$GameStatus
。
我使用以下代码行来执行此操作:
invokedMeth = invokedMeth.replaceAll("(.*)\\.(\\d+)$","$1$$2");
但是,这不起作用,我最终得到了与输入相同的原始字符串。我该如何解决这个问题?
最佳答案
对于这个要求,我会使用非正则表达式的解决方案,它更容易理解并且更高效。
StringBuilder invokedMethSb = new StringBuilder(invokedMeth);
invokedMethSb.setCharAt(invokedMethSb.lastIndexOf("."), '$');
invokedMeth = invokedMethSb.toString();
/*de.java_chess.javaChess.game.GameImpl$GameStatus*/
StringBuilder对于这些操作有一些很好的实用程序,例如 setCharAt
.
作为个人意见,我更喜欢以下一个:
char[] invokedArray = invokedMeth.toCharArray();
invokedArray[invokedMeth.lastIndexOf(".")]='$';
invokedMeth = new String(invokedArray);
/*de.java_chess.javaChess.game.GameImpl$GameStatus*/
正则表达式解决方案:
您可以使用Positive Lookahead , (?=([^.]*)$)
其中 ([^.]*)
匹配任意数量的非点(即 [^. ]
) 字符和 $
断言行尾的位置。您可以查看regex101.com以获得更多解释。
public class Main {
public static void main(String[] args) {
String str = "de.java_chess.javaChess.game.GameImpl.GameStatus";
str = str.replaceAll("\\.(?=([^.]*)$)", "\\$");
System.out.println(str);
}
}
输出:
de.java_chess.javaChess.game.GameImpl$GameStatus
关于java - 将字符串中的最后一个点替换为美元符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66439883/