use*_*764 2 java regex replace
我想用美元符号替换以下字符串中的最后一个点,我该怎么做?
de.java_chess.javaChess.game.GameImpl.GameStatus
Run Code Online (Sandbox Code Playgroud)
我想要de.java_chess.javaChess.game.GameImpl$GameStatus代替。
我正在使用以下代码行来执行此操作:
invokedMeth = invokedMeth.replaceAll("(.*)\\.(\\d+)$","$1$$2");
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,我最终得到了与输入相同的原始字符串。我怎样才能解决这个问题?
对于这个要求,我将使用一个更容易理解和更高效的非正则表达式解决方案。
StringBuilder invokedMethSb = new StringBuilder(invokedMeth);
invokedMethSb.setCharAt(invokedMethSb.lastIndexOf("."), '$');
invokedMeth = invokedMethSb.toString();
/*de.java_chess.javaChess.game.GameImpl$GameStatus*/
Run Code Online (Sandbox Code Playgroud)
StringBuilder为这些操作提供了一些很好的工具,例如setCharAt.
就个人观点而言,我更喜欢以下一种:
char[] invokedArray = invokedMeth.toCharArray();
invokedArray[invokedMeth.lastIndexOf(".")]='$';
invokedMeth = new String(invokedArray);
/*de.java_chess.javaChess.game.GameImpl$GameStatus*/
Run Code Online (Sandbox Code Playgroud)
正则表达式解决方案:
您可以使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
de.java_chess.javaChess.game.GameImpl$GameStatus
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |