Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除字符串中出现的一个字符?_Java - Fatal编程技术网

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

Java 如何删除字符串中出现的一个字符?,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

我几天前写了这段代码

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


有人能帮我删除一个吗?

这将删除
字符串中出现的第一个
字符。添加了一个
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')的输出示例


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

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

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

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

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

  • 您应该将您的方法命名为
    removeFirst()
    ,而不是
    removeAll()
    ,否则会让下一个开发人员非常困惑


什么是
print
?如果字符串中多次出现字符,应该删除什么?不回答您的问题,但您应该使用
StringBuilder
而不是
string
来返回
(然后,将
返回到\u return.toString()
),否则,您的方法将花费二次时间。是否要实现删除给定字符串中第一次出现的字符?
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());
}
public static String removeFirst(char ch, String s) {
    return s.replaceFirst(Pattern.quote("" + ch), "");
}