java - 将字符串中的最后一个点替换为美元符号

标签 java regex replace

我想用美元符号替换以下字符串中的最后一个点,我该怎么做?

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/

相关文章:

regex - 使用 RegexParsers 解析空格

c++ - 在 C++ 中查找和修改 txt 文件

Java正则表达式在两个模式之间插入单个字符

java - 有没有可以代替键的排序Map

Java 正则表达式匹配零次或一次

python - 如何用多个字符替换合并两个字符串列表

javascript - 用 Regex 替换方法 - 意外的输出日志记录匹配 $& 和 Group $1

java - Android 应用程序存储和搜索数据

java - Android WebView 始终为 loadUrl 上的 javascript getElementById 返回 null

PHP:将文本链接转换为 anchor 标记