簡體   English   中英

替換 Java 字符串中出現的部分但不是所有字符

[英]Replacing some but not all occurrences of a char in Java String

我正在學習Java,並且在一項任務中,我必須將一些但不是所有出現的“-”替換為“(”,並且對於“*”和“)”也是如此,前提是 - 的內部是一個 id 為如下:

String input = "-id1234* -id1235* -id1236* Do not replace these -signs*";
String output = "(id1234) (id1235) (id1236) Do not replace these -signs*";

我嘗試遍歷一個循環,並在 for 循環到達i位置后替換第一次出現,但這似乎不起作用:

    static String clean(String input) {
        
        String tmp = input;
        
        for (int i = 0; i < input.length(); i++) {
            
            if (input.charAt(i) == 'i') {
            tmp = input.replaceFirst("-", "("); 
            } else if(Character.isDigit(i)){
                 tmp = input.replaceFirst("*", ")");
            }
        }
        
        return tmp; 
    }

你沒有說你的方法似乎不起作用,但看起來你正在用“)”替換你找到的每個數字:1、2、3、4,然后是 1 , 2, 3, 5,所以用更多的括號代替星號。

這假定后跟數字的“id”始終是您想要在“-”和“*”之間匹配的內容。 使用正則表達式匹配並替換為replaceAll方法

return input.replaceAll("-(id\\d+)\\*", "($1)");

匹配一個- 用括號在正則表達式中形成一個捕獲組。 匹配id 連續匹配一個或多個數字。 在捕獲組之后,匹配一個* 反斜杠用於 1) 轉義文字反斜杠以形成字符類 \d - 數字,以及 2) 轉義文字反斜杠以正則表達式轉義星號。

替換表達式中的$1表示第一個捕獲組。

輸出:

(id1234) (id1235) (id1236) Do not replace these -signs*

暫無
暫無

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

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