在没有replace方法的情况下从字符串中删除所有出现的字符

时间:2013-11-27 07:45:15

标签: java

我需要编写一个名为remove()的方法,该方法接受两个参数,Stringchar,并返回一个新的String,用于从输入字符串中删除所有出现的char 。我必须在不使用replace()方法的情况下执行此操作。到目前为止,我有:

public class Remover
{
   public static void main (String[] args)
    {
        String sampleString = "this is some text";
        char sampleChar = 's';
        System.out.print(remove(sampleString, sampleChar));
    }
    public static String remove(String a, char b)
    {
      String newString = "";
        newString = a.substring(0, a.indexOf(b))+""+a.substring(a.indexOf(b)+1);

        return newString;
    }
}

主要方法仅用于测试目的,示例字符串和char只是示例;我需要这个方法来处理任何字符串和char。但无论哪种方式,我都确定我所拥有的是错的,我完全迷失了如何继续前进。对于这种情况,我正在尝试让我的代码返回

"thi i ome text"

7 个答案:

答案 0 :(得分:2)

  1. 使用char方法从字符串中获取string.toCharArray()数组。
  2. 遍历char数组。如果char不等于您的目标char
  3. ,请将{{1}}附加到字符串
  4. 使用StringBuilder类进行追加:构建字符串。

答案 1 :(得分:1)

您可以使用charAt()

遍历字符串
String s = "this is some text";

public static String remove(String a, char b) {

    String word = "";

    for (int i = 0; i < a.length(); i++){
        if (s.charAt(i) != b){
            word += a.charAt(i);
        }
    }

    return word;

}

字符串连接的替代方法是在循环中使用StringBuilder

StringBuilder sb = new StringBuilder();

for (int i = 0; i < a.length(); i++){
    if (s.charAt(i) != b){
        sb.append(s.charAt(i));
    }
}

return sb.toString();

另一种解决方法是将String转换为char数组并遍历数组

 StringBuilder sb = new StringBuilder;

 for (char c : s.toCharArray()){
     if (c != b) {
         sb.append(c);
     }   
 }

 return word;

答案 2 :(得分:0)

我不会建议替代解决方案,我会告诉您如何解决当前代码中的问题。

您的程序仅适用于s的第一次出现。您应该执行以下操作:

  1. 根据" "拆分字符串。
  2. 将数组中的每个单词传递给remove方法。
  3. 使用" "
  4. 在同一行打印结果

    应该有类似的东西:

    String sampleString = "this is some text";
    String[] arr = sampleString.split(" ");
    char sampleChar = 's';
    for(String str : arr) {
        System.out.print(remove(str, sampleChar) + " ");
    }
    

    请注意,在remove方法中,您应检查字符串是否包含s,如果不包含,请按原样返回:

    public static String remove(String a, char b) {
       if(!a.contains(b)) {
          return a;
       }
       String newString = "";
       newString = a.substring(0, a.indexOf(b))+""+a.substring(a.indexOf(b)+1);
       return newString;
    }
    

    这应该有用。

答案 3 :(得分:0)

您可以使用如下的递归。但仍然使用StringBuilder,这是更好的方法。这只是为了使你的代码工作

public static String remove(String a, char b)
{
   String newString = "";
   newString = a.substring(0, a.indexOf(b))+""+a.substring(a.indexOf(b)+1);
   if(newString.indexOf(b)!=-1) {
     newString= remove(newString,b);
   }
   return newString;
}

答案 4 :(得分:0)

您可以使用a.toCharArray())

将源字符串转换为char数组

然后编写一个for循环来逐个比较char数组中的char元素和预期删除的char。

如果不相等,则将其附加到StringBuilder对象。

试试这个;

 public static String remove(String a, char b) {
    /*String newString = "";
    newString = a.substring(0, a.indexOf(b)) + ""
            + a.substring(a.indexOf(b) + 1);

    return newString;*/

    StringBuilder sb = new StringBuilder();

    for(char c: a.toCharArray())
    {
        if(c!= b)
        {
            sb.append(c);
        }
    }
    return sb.toString();
}

答案 5 :(得分:0)

public class charReplace{
    public static void main(String args[]){
    String sampleString = "This is some text";
    char sampleChar = 's';
    System.out.println(char_remove(sampleString, sampleChar));
}

public static String char_remove(String a, char b){
    String newString = " ";
    int len = a.length();
    for(int i =0; i<len ;i++)
     {
       char c = a.charAt(i);
       if(c == b)
          newString = newString + " ";
       else
          newString = newString + c ;  
     }
    return newString;
  }
}

答案 6 :(得分:0)

 public static String remove(String a, char b)
    {
       StringBuilder sbul =new StringBuilder();
       int i;
        for(i=0;i<a.length();i++){
              char c = a.charAt(i);
               if(c==b)
                  continue;
                sbul.append(c);
             }
        return sbul.toString();
}