簡體   English   中英

Java-替換字符串:charAt VS子字符串

[英]Java - replace string: charAt VS substring

我正在做一個簡單的測試,只是從字符串中刪除一個字符。 它是這樣的:

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)", ""));

子字符串版本運行良好,僅當i = 1時charAt才能運行良好。 這是怎么了

在第二段和第三段中,您不是要替換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)), ""));

System.out.println(str.replaceFirst(“ str.charAt(i)”,“”));

不按照您的想法去做。 它不是在找i一個角色。 它正在尋找與正則表達式模式“ str.charAt(i)”匹配的第一個實例。 您的其他“ replaceFirst”實現也存在類似的問題。

這意味着“ strAchar(i)”與“ str.charAt(i)”匹配,但是當我碰巧等於2時,“ i”與“ str.charAt(i)”不匹配。 雙引號之間的內容不會解釋為Java代碼。

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

這條線將在字符串替換字符串“STR,的charAt(I)”用“”(如果發生的話) str 您需要在此處閱讀有關replace()charAt() 信息

使用第一個示例,您說“效果很好”,我希望得到以下輸出:

小貓

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”,因此刪除了charachter。

最后一個示例是在字符串“ 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", ""));

暫無
暫無

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

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