从字符串中删除特定字符

3

我是一名学生,正在尝试解决一个问题。
我需要创建一个方法,从另一个字符串中删除指定字符串中找到的任何字符。
因此,如果 String str = "hello world" and String remove = "eo",则该方法将返回"hll wrld"

我的解决方案设置方式会多次打印出结果字符串,这是我不想要的。是否有简单的解决方法,或者我必须重新设计该方法?

class StringStuff{
        public static void main (String [] args){

        String str = "This is a string that needs to be changed";
        String remove = "iaoe";

        System.out.println(removeChars(str, remove));

        }

    public static String removeChars(String str, String remove){
        String newStr = "";
        for(int i=0;i<remove.length();i++){
            for(int j=0; j<str.length(); j++){
                if(str.charAt(j)!=remove.charAt(i)){
                    newStr = newStr+str.charAt(j);
                }
            }
        }        
        return newStr;
    }
}

更新

谢谢您的回复,我根据您提供的解决方案,想出了另一种“新手”的方法。

public static String removeChar(String str, String remove){
      String newStr = "";
      boolean match = false;
      for(int i = 0; i<str.length(); i++){
         for(int j=0; j<remove.length(); j++){
            if(str.charAt(i) == remove.charAt(j))
               match = true;
         }
         if(match == false)
            newStr = newStr + str.charAt(i);
         match = false;
      }
      return newStr;
   }

我认为你想要交换循环的顺序。 - squiguy
@squiguy:仅凭这个不足以修复错误。 - jlordo
@jlordo 我知道。这就是为什么我在评论中指出它的原因。 - squiguy
2个回答

2
这个答案假设不允许使用replaceXXX方法。
首先,for循环的顺序是错误的。第一个循环需要遍历原始的String
下一个问题是嵌套的for循环将一个字符附加到新的String中,只要提供的remove字符串中的字符不匹配。这会产生hllo worldhell wrld
因此,解决方案不是遍历remove字符串。使用indexOf进行字符检查。
public static String removeChars(String str, String remove) {
   String newStr = "";
   for (int i = 0; i < str.length(); i++) {
      if (remove.indexOf(str.charAt(i)) == -1) {
       newStr = newStr + str.charAt(i);
      }
   }

   return newStr;
}

可以通过使用StringBuilder而不是String来进一步改进newStr。

2
这将完成工作:
return str.replaceAll("[" + remove + "]", "");

只要remove中不包含在正则表达式字符类中需要转义的字符。

请参阅 Pattern.quote。我会将其重写为 str.replaceAll(String.format("[%s]",Pattern.quote(remove)), "") - arshajii
@A.R.S.:没用。\Q\E 将位于字符类内部并失去其特殊含义。 - jlordo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接