2011-05-09 22 views
1

我有2個字符串str1和str2,我想建立一個更新的str2與字符不存在於str1內部的內容,而不使用內置的字符串函數。 字符串如下:如何從String2中刪除String1並用剩餘的字符串構建一個新的String2?

String str1="bdf"; 

String str2="abc gde fhi**"; 

和輸出應該是這樣的:

"ac ge hi"; 
+1

哪種語言?爲什麼不使用內置函數的字符串? – 2011-05-09 06:27:25

+1

,因爲這是一個家庭作業問題 - 他們被要求構建一個算法... – 2011-05-09 06:30:15

+0

您是否允許將字符串轉換爲CharArray?因爲那麼你可以遍歷所有的角色並檢查它是否在陣列中。或者你不允許使用任何String.function? – Matthias 2011-05-09 06:41:31

回答

0

我說使用內置的方式從字符串讀取字符的陣列和foreach循環以除去包含的字符。

對於C#這應該是這樣的:

foreach(char c in str1) 
{ 
    str2.Replace(c,' ').Trim(); 
} 

當然,你也可以使用索引和str.Remove(),以避免空間...

- 編輯對不起,我剛剛看了你們間沒有不允許使用內置函數 - 但是從字符串中讀取數組不是函數 - 每個字符串都以字符數組的形式保存在內存中 - 所以這應該沒問題,只能改變刪除字符的方式:

String result; 
int i=0; 
foreach(char c in str2) 
{ 
    Bool isincluded = false; 

    foreach(char c2 in str1) 
    { 
    if(c == c2) isincluded = true; 
    } 

    if(isincluded == false) 
    { 
     result[i] = c; 
     i++; 
    } 
} 

沒有驗證...但我希望它的工作:)

+0

嘿,洛倫茲謝謝,但我不想使用字符串內置功能,你說使用替換()和修剪()。這不是我的解決方案... – subodh 2011-05-09 06:48:11

+0

看起來上面...編輯一種沒有內置功能的方式,希望它的工作;) – Lorenz 2011-05-09 06:50:49

+0

再次編輯,所以沒有空間,應該沒有 - 謝謝丹尼爾! – Lorenz 2011-05-09 07:47:39

0
String removeCharsFromString(String fromString, String charsToBeRemoved) { 
    BitSet charSet = new BitSet(); 
    for (char c : charsToBeRemoved.toCharArray()) 
     charSet.set(c); 

    StringBuilder outputStr = new StringBuilder(); 
    for (char c : fromString.toCharArray()) 
     if (charSet.get(c) == false) 
      outputStr.append(c); 
    return outputStr.toString(); 
} 
+0

謝謝埃米爾,但我不想使用字符串內置功能。例如(toCharArray()),您正在使用上述代碼。謝謝你的好例子 – subodh 2011-05-09 11:27:24

0

這是完整的例子。這不是你可以得到的最好效果,但是因爲你不能使用特別爲你的問題所做的功能,所以這應該工作得很好:

import java.util.*; 
public class Test{ 
    public static void main(String[]args){ 
     String s1 = "abc def ghi"; // Source 
     String s2 = "behi";   // Chars to delete 

     StringBuffer buf = new StringBuffer(s1); // Creates buffer (for deleteCharAt() func) 

     for (int i=0; i<s2.length(); i++){ // For each letter in the delete-string 
      for (int j=0; j<s1.length(); j++){ // Test each letter in the source string 
       if (s1.charAt(j)==s2.charAt(i)){ // Chars equal -> delete 
        buf.deleteCharAt(j); 
        s1=buf.toString(); // Updates the source string 
        j--;  // Moves back one position (else it would skip one char, due to its deleting) 
       } 
      } 
     } 
     System.out.println(buf.toString()); 
    } 
} 
相關問題