2015-04-01 65 views
1
this CodingBat problem

正如我試圖做到以下幾點:Java String.replace() - 替換的不僅僅是我指定的子字符串嗎?

給定一個字符串,如果第一個或最後一個字符是「X」,返回字符串沒有這些「X」字符,否則返回字符串不變。

我的代碼:

public String withoutX(String str) { 
    if (str.startsWith("x")) { 
     str = str.replace(str.substring(0, 1), ""); 
    } 
    if (str.endsWith("x")) { 
     str = str.replace(str.substring(str.length()-1), ""); 
    } 
    return str; 
} 

此代碼替換所有x字符字符串中,而不是僅僅在第一和最後一個。爲什麼會發生這種情況,那麼解決問題的好方法是什麼?

+0

之所以出現這種情況的子字符串兩側是'海峽.replace(str.substring(0,1),「」);'reduce to'str.replace(「x」,「」);'這意味着'用''替換每個'x'。在執行'replace'時,第一個參數只是一個字符串「x」;它沒有任何有關該字符串來自哪裏的信息。 – khelwood 2015-04-01 12:53:11

回答

1

從SDK的replace方法:

返回在此字符串是通過用newChar替換所有出現 oldChar而產生一個新的字符串。

可以解決這個問題,而不更換:

public String withoutX(String str) { 
    if (str == null) { 
     return null; 
    } 

    if (str.startsWith("x")) { 
     str = str.substring(1); 
    } 
    if (str.endsWith("x")) { 
     str = str.substring(0, str.length()-1); 
    } 

    return str; 
} 
+0

當'str'是'x'時它不適合 - 所以它在開始時需要一個額外的'if'語句來解釋它現在的那個 – alanbuchanan 2015-04-01 13:01:45

+0

@alanbuchanan;) – giorashc 2015-04-01 13:11:39

4

您可以使用string.replaceAll函數。

string.replaceAll("^x|x$", ""); 

上面的代碼將取代x這是在開始或結尾。如果在開始或結束時沒有x,它將不變地返回原始字符串。

-1

可以使用replaceFirst的第一個字符,或者您可以通過1個字符

public static String withoutX(String str) { 
     if (str.startsWith("x")) { 
      str = str.replaceFirst("x", ""); 
     } 
     if (str.endsWith("x")) { 
      str = str.substring(0,str.length() - 1); 
     } 

     return str; 
    }