如何从String2中删除String1并使用剩余的字符串构建一个新的String2?

时间:2011-05-09 06:23:02

标签: java string character

我有2个字符串str1和str2,我想构建一个更新的str2,其中包含str1内部不存在字符的内容,而不使用字符串的内置函数。 字符串如下:

String str1="bdf";

String str2="abc gde fhi**";

和输出应该是:

"ac ge hi";

3 个答案:

答案 0 :(得分:0)

我会说使用内置方式从字符串中读取一个字符数组和一个foreach循环来删除包含的字符。

对于c#,它看起来像这样:

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

当然你也可以使用索引和str.Remove()来避免空格......

-EDIT抱歉,我刚刚读到你不允许使用内置函数 - 但是从字符串中读取数组是没有功能的 - 每个字符串都作为字符数组保存在内存中 - 所以这应该没问题,只有改变删除字符的方式:

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++;
   }
}

未经过验证......但我希望它有效:)

答案 1 :(得分: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();
}

答案 2 :(得分: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());
    }
}