如何删除字符串中出现的一个字符?

时间:2014-02-06 16:58:00

标签: java

我几天前写了这段代码

String removeAll(char c, String s) {

  String to_return = "";

  while(true) {
      if (s.equals(""))
        return to_return;

      // at this point s is not ""
      char c2 = s.charAt(0);
      if (c2 != c)
      {
        to_return += c2;
      }

      s = s.substring(1);
  }

  return to_return; // won't be reached
}

print(removeAll('o',"hello"));

几乎......删除所有' o'从字符串..但我出去做自己,我只应该删除一个出现的char ..

任何人都可以帮我删除一个吗?

3 个答案:

答案 0 :(得分:1)

一种有效的方法是使用StringBuilder:

public static String removeFirst(char ch, String s) {
    int charPos = s.indexOf(ch);
    if (charPos < 0) {
        return s;
    }
    return new StringBuilder(s).deleteCharAt(charPos).toString();
}

或者,连接字符前面的子字符串和后面的子字符串:

public static String removeFirst(char ch, String s) {
    int charPos = s.indexOf(ch);
    if (charPos < 0) {
        return s;
    }
    return s.substring(0, charPos) + s.substring(charPos + 1, s.length());
}

或者使用内置的String方法replaceFirst():

public static String removeFirst(char ch, String s) {
    return s.replaceFirst(Pattern.quote("" + ch), "");
}

注意:

  • replaceFirst()方法使用正则表达式进行匹配,因此您应该确保正确引用该字符以避免在正则表达式中有意义的特殊字符出现问题(例如$

  • 而不是"" + ch你可以使用String.valueOf(ch),但我发现更多的是一口(虽然更“正确”)。如果你担心快速编写代码,我会避免使用replaceFirst(),因为它非常慢 - 在幕后它会在每次运行时将表达式编译成正则表达式模式。

  • 您应该为您的方法命名removeFirst()而不是removeAll(),否则对下一位开发人员来说会非常混乱!

答案 1 :(得分:0)

您必须使用具有StringBuilder方法的deleteCharAt来删除特定索引处的字符。

     String inputString = "hello";
    char c = 'e';
    StringBuilder sb = new StringBuilder(inputString);
    sb.deleteCharAt(inputString.indexOf(c));

答案 2 :(得分:-1)

这将删除char中出现的第一个String。添加了boolean以了解是否已删除char

String removeAll(char c, String s) {

        boolean removed = false;

        String to_return = "";

        while(true) {
            if (s.equals(""))
                return to_return;

            // at this point s is not ""
            char c2 = s.charAt(0);
            if (c2 != c)
            {
                to_return += c2;
            }
            else
            {
                if(! removed)
                    removed = true;
                else
                    to_return += c2;
            }

            s = s.substring(1);
        }

    }

removeAll('o',"oh, hello")的输出示例:

h, hello