-2
StringBuffer a = new StringBuffer(string1);
StringBuffer b = new StringBuffer(string2);
String res = "";
for(int i=0; i<a.length(); ){
   for(int j=0; j<b.length(); j++){
      if(a.charAt(i) == b.charAt(j)){
         a.deleteCharAt(i);
         b.deleteCharAt(j);
         j=0;
         if(b.length() == 0) return a.toString();
     }else{
         i++;
   }
}
for(int i=0; i<a.length(); i++){
  res += a.charAt(i);
 }
    return res;

I am getting Runtime ErrorException in thread "main" java.lang.StringIndexOutOfBoundsException: index 14,length 14enter code here at java.base/java.lang.String.checkIndex(String.java:3278) at java.base/java.lang.AbstractStringBuilder.charAt(AbstractStringBuilder.java:307) at java.base/java.lang.StringBuffer.charAt(StringBuffer.java:242) at Solution.removeChars(File.java:34) at GFG.main(File.java:16)

1 Answers1

0

The simplest (however, error-prone) solution to this task could be to use String::replaceAll method, where the argument toRemove needs to be converted into proper regular expression:

static String removeChars(String src, String toRemove) {
    if (null == toRemove || 0 == toRemove.length() || null == src) {
        return src;
    }

    return src.replaceAll("[" + toRemove + "]", ""); // works fine with letters/digits
}

Using Stream API for this task would not require escaping of specific characters:

static String removeChars(String src, String toRemove) {
    if (null == toRemove || 0 == toRemove.length() || null == src) {
        return src;
    }
    System.out.printf("Removing %s from %s -> ", toRemove, src); //debug print 
    return src.chars()
              .mapToObj(c -> String.valueOf((char) c))
              .filter(Predicate.not(toRemove::contains))
              .collect(Collectors.joining(""));
}

If Predicate.not cannot be used because it's available starting from Java 11, the filter should be rewritten:

    return src.chars()
              .mapToObj(c -> String.valueOf((char) c))
              .filter(c -> !toRemove.contains(c))
              .collect(Collectors.joining(""));

Tests:

System.out.println(removeChars("aAbBcCdD", "abc"));
System.out.println(removeChars("aAbBcCdD", "Dad"));

Output

Removing abc from aAbBcCdD -> ABCdD
Removing Dad from aAbBcCdD -> AbBcC
Nowhere Man
  • 19,170
  • 9
  • 17
  • 42