簡體   English   中英

僅替換字符串中的一個指定字符

[英]Replace only one specified character from string

我想在每次迭代時從字符串中替換一個字符。 我已經編寫了一些生成以下 output 的代碼:

美東時間

英石

這很好,也是我預期的結果。


但是當我添加輸入:“你好”時,我的 output 發生了變化:

你好

llo

o

如您所見,兩個“l”同時被刪除。 原因如下:

“replace(CharSequence target, CharSequence replacement) 用指定的文字替換序列替換此字符串中與文字目標序列匹配的每個 substring”。

從文檔中可以看出,每個 substring 都被替換了。 字符串class中是否有替代的function? 請注意,我只想使用 String 而不是其他第三方庫。


也許先替換 function 確實實現了這一點? 但是因為它需要正則表達式我不知道如何使用它;(

提前感謝您的幫助!

這是我的代碼:

public static boolean isAnagram(String first, String second){

    final int first_len = first.length();
    final int second_len = second.length();
    if (first_len != second_len){
        return false;
    }

    //String newWord = oldWord.replace(oldChar,newChar)

    for (int i = 0; i < first_len; i++) {
        char ch = first.charAt(i);
        first = first.replace(ch, ' ');
        System.out.println(first);
        for (int j = 0; j < first_len; j++){
            if (second.charAt(j) == ch) {
                second = second.replace(second.charAt(j), ' ');
            }
        }
    }

    if (first.trim().isEmpty() && second.trim().isEmpty()){
        return true;
    }
    return false;
}

只需使用"Hello".substring(1); 將以一致的方式刪除第一個字母

雖然我確實認為有更好的方法來檢查字符串是否是變位詞,但我認為如果您了解您的想法正確實施的樣子可能會有所幫助。

你的方法不必要地復雜。 您真正需要做的是:

  1. 遍歷第一個字符串的字符
  2. 用空字符串替換第二個字符串中該字符的第一次出現。
  3. 完成迭代后,檢查第二個字符串現在是否為空,這將告訴您是否找到了第一個字符串中的所有字符:

--

public static boolean isAnagram(String first, String second) {

    final int first_len = first.length();
    final int second_len = second.length();
    if (first_len != second_len) {
        return false;
    }
    
    // If you want your anagram check to be case sensitive, comment out the following 2 lines
    first = first.toLowerCase();
    second = second.toLowerCase();
    
    for (int i = 0; i < first_len; i++) {
        final char ch = first.charAt(i);
        second = second.replaceFirst(Pattern.quote(String.valueOf(ch)), "");
    }

    if (second.trim().isEmpty()) {
        return true;
    }
    return false;
}

因為replaceFirst方法使用正則表達式作為參數,所以我們使用方法Pattern.quote來確保傳遞的字符被解釋為文字字符,而不是意外地被解釋為一些特殊的正則表達式字符。

暫無
暫無

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

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