有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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”。。但我自己做了,我应该只删除一个出现的字符

有人能帮我去掉一个吗


共 (3) 个答案

  1. # 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
    
  2. # 2 楼答案

    一种有效的方法是使用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());
    }
    

    或者使用内置的字符串方法replaceFirst():

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

    注:

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

    • 你可以用String.valueOf(ch)而不是"" + ch,但我发现这更像是一口(尽管更“正确”)。如果你担心这段代码太快,我会避免使用replaceFirst(),因为它非常慢——在后台,每次运行它都会将表达式编译成正则表达式模式

    • 你应该把你的方法命名为removeFirst(),而不是removeAll(),否则下一个开发者会很困惑

  3. # 3 楼答案

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

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