2013-05-20 46 views
-7

我試圖創建一個方法,將接受2個字符串作爲參數。第一個字符串將是一個短語,第二個也是一個前期。我想要的方法是比較兩個字符串匹配的字符。如果字符串2具有在字符串1中找到的字符,則用下劃線替換字符串2的字符實例。java方法返回一個修改後的字符串

例子:

這是輸入:

phrase1 = "String 1" 
phrase2 = "Strone 2" 

輸出字符串被稱爲newPhrase,它會從下劃線內置的字符串:

newPhrase = "___one 2" 

它不爲我工作我做錯了什麼。

public class DashedPhrase 
{ 
public static void main(String[] args) 
{ 
    dashedHelp("ABCDE","ABDC"); 
} 

public static String dashedHelp(String phrase1, String phrase2) 
{ 
    String newPhrase = "_"; 

    for(int i = 0; i < phrase.length(); i++) 
    { 
     if(phrase.charAt(i) == phrase2.charAt(i)) 
     { 
      newPhrase.charAt(i) += phrase2.charAt(i); 
     } 

    } 

    System.out.print(newPhrase); 
    return newPhrase; 
} 
} 
+3

你是什麼意思「它不適合我」?什麼不起作用? –

+0

另外,你的例子沒有意義。爲什麼輸出中的「n」? – jlordo

回答

0

newPhrase.charAt(i)不讓你替換一個字符,它只是返回它。 Java的字符串是不可變的。我想改變它,你應該使用StringBuilder。查看replace(int start, int end, String str)方法。

-2

該示例中的代碼甚至不會編譯。

newPhrase.charAt(i) += phrase2.charAt(i); 

這是一個糟糕的任務。這與寫作相同

newPhrase.charAt(i) = newPhrase.charAt(i) + phrase2.charAt(i); 

但'='左側的表達式不是您可以正確指定值的內容。

+0

WTF?如果你打算倒下,說*爲什麼*。 – nsayer

+4

我沒有downvote,但一個原因可能是,這不是一個答案... – jlordo

+0

這當然是一個答案,爲什麼給出的代碼將不能正確編譯... – nsayer

2

爲了便於您理解,您可以使用StringBuilder及其方法setCharAt()

請注意i < phrase1.length() && i < phrase2.length()條件下的for循環。這是爲了確保你不會得到任何異常。

public static void main(String[] args) 
{ 
    System.out.println("ABCDE"); 
    System.out.println("ABDC"); 
    dashedHelp("ABCDE","ABDC"); 
    System.out.println(); 
    System.out.println(); 
    System.out.println("String 1"); 
    System.out.println("Strone 2"); 
    String phrase1 = "String 1"; 
    String phrase2 = "Strone 2"; 
    dashedHelp(phrase1, phrase2); 
} 

public static String dashedHelp(String phrase1, String phrase2) 
{ 
    StringBuilder newPhrase = new StringBuilder(phrase1); 
    for(int i = 0; i < phrase1.length() && i < phrase2.length(); i++) 
    { 
     if(phrase1.charAt(i) == phrase2.charAt(i)) 
     { 
      newPhrase.setCharAt(i, '_'); 
     } 
    } 
    System.out.print(newPhrase); 
    return newPhrase.toString(); 
} 

輸出:

ABCDE 
ABDC 
__CDE 

String 1 
Strone 2 
___i_g_1 
+0

爲什麼匹配的空格字符也被下劃線替換? – jlordo

+1

@jlordo我相信你知道爲什麼:代碼沒有區分字符。我剛剛改變了他的代碼,他似乎真的有麻煩。爲了讓它忽略空格字符很簡單,你覺得我應該爲空格字符添加一個例外嗎? – acdcjunior

+0

我的不好,我的想法扭曲了。每個匹配角色都有一個下劃線,因此有一個空間位置。說得通。 – jlordo

0

,因爲你需要返回具有相同長度phrase2一個字符串,你需要遍歷的phrase2每個字符,並替換這兩個短語的匹配字符。當然,如果phrase2長於phrase1,則需要在答案中包含其餘字符。你可以試試這個:

public static String dashedHelp(String phrase1, String phrase2) { 
    String ans = ""; 
    String subChar = "_"; 
    int i; 
    for(i = 0; i<phrase2.length(); i++) { 
     if(i<phrase1.length() && phrase1.charAt(i) == phrase2.charAt(i)) 
      ans += subChar; 
     else 
      ans += phrase2.charAt(i); 
    } 
    return ans; 
} 

希望它有助於


當然,如果你需要輸出phrase1與在phrase2具有相同字符的地方下劃線,你可以互換phrase2與在phrase1以上代碼。


測試它

完整的類應該是這樣的:

public class MyClass { 
    public static String dashedHelp(String phrase1, String phrase2) { 
     // The method code goes here 
    } 
    public static void main(String[] args) { 
     System.out.println(dashedHelp("String 1", "Strone 2")); 
    } 
} 

這個程序的輸出爲___o_e_2。這匹配(大約)您的期望輸出。

+0

我看到了5個編譯器錯誤,只是通過瀏覽代碼... – jlordo

+0

@jlordo感謝您的反饋,我想我已經糾正了您遇到的錯誤。 – Barranka

相關問題