2014-09-03 45 views
-1

我正在做一個簡單的測試,只是從字符串中刪除一個字符。它是這樣的:Java - 替換字符串:charAt VS子字符串

String str = "kitten"; 
    int i = 2; 
    //substring version - works good 
    System.out.println(str.replaceFirst(str.substring(i, i+1), "")); 
    //charAt (tried as regex): 
    System.out.println(str.replaceFirst("[str.charAt(i)]", "")); 
    //charAt (tried as char): 
    System.out.println(str.replaceFirst("str.charAt(i)", "")); 

子字符串版本很好,charAt只有當我= 1時纔有用。這裏有什麼問題?

+0

你是什麼'''[str。charAt(i)]「'是什麼意思? – talex 2014-09-03 08:12:30

+0

你認爲charAt返回了什麼? – 2014-09-03 08:12:48

+0

你應該學習正則表達式,試着用谷歌搜索它;) – 2014-09-03 08:12:49

回答

3

在你的第二個和第三個片段中,你替換的結果不是charAt(),而是"charAt(i)"的字符串。看,它在引號中。另外,charAt()返回char,因此您必須在使用前將其轉換爲String

嘗試這種情況:

System.out.println(str.replaceFirst("[" + String.valueOf(str.charAt(i)) + "]", "")); 
System.out.println(str.replaceFirst(String.valueOf(str.charAt(i)), "")); 
0

的System.out.println(str.replaceFirst( 「str.charAt(I)」, 「」));

不會做你認爲的事情。它不尋找i的字符。它正在尋找匹配正則表達式模式「str.charAt(i)」的第一個實例。您的其他「replaceFirst」實施存在類似的問題。

這意味着「strAchar(i)」與「str.charAt(i)」匹配,但當碰巧等於2時,「i」與「str.charAt(i)」不匹配。雙引號之間的內容不被解釋爲Java代碼。

0
System.out.println(str.replaceFirst("str.charAt(i)", "")); 

這條線將替換字符串 「STR,的charAt(I)」 的字符串str在用 「」(如果發生的話)。 您需要詳細瞭解replace()charAt()here

0

使用第一個例子,你說 「好工作」,我期望這樣的輸出:

貓咪

ktten

小貓

str.substring(i+1)回報't'(i + 1或「3rd」字符)。然後,您將其傳遞到str.replaceFirst,它用「」替代第一個發生的't',有效地將其刪除。

你在做的第二件事很奇怪:你用正則表達式「[str.charAt(i)]」調用replaceFirst,這基本上意味着「替換方括號中任何字符的第一個(除我認爲「所以你可以說」匹配任何字符A,A,C,H,I,R,S,T「(我已經將字母,刪除重複項和'(',')'和'。'),並且這些匹配「小貓」的字符中的第一個恰好是'i',因此該字符被刪除。

最後一個例子是尋找字符串「str.charAt (i)「當然在」小貓「中找不到的地方你也可以搜索」狗「

以下代碼等同於您剛剛完成的操作:

String str = "kitten"; 
int i = 2; 
// Eliminated redundant regex replacement: 
System.out.println(new StringBuffer(str.substring(0, i)).append(str.substring(i+1))); 
// Search for any of the characters in "str.substring(i)" 
System.out.println(str.replaceFirst("[aAchirst]", "")); 
// Search for non-matching string 
System.out.println(str.replaceFirst("dog", ""));