簡體   English   中英

用美元符號替換字符串中的最后一個點

[英]replace last dot in a string with a dollar sign

我想用美元符號替換以下字符串中的最后一個點,我該怎么做?

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(?=([^.]*)$)其中([^.]*)匹配任意數量的非點(即[^.] )字符和$在末尾斷言 position一條線。 您可以查看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);
    }
}

Output:

de.java_chess.javaChess.game.GameImpl$GameStatus

適當的正則表達式也可以幫助進行這種替換:

String withDot = "de.java_chess.javaChess.game.GameImpl.GameStatus";
 
String with$ = withDot.replaceFirst("(\\w+(\\.\\w+)*)(\\.(\\w+))", "$1\\$$4");
 
System.out.println(with$);

Output在線演示

de.java_chess.javaChess.game.GameImpl$GameStatus

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM