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

谁能帮我移除一个?

最佳答案

一种有效的方法是使用 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() 方法使用正则表达式进行匹配,因此您应该确保正确引用字符以避免在正则表达式中有意义的特殊字符出现问题(例如 $).

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

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

关于java - 如何删除字符串中出现的一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609212/

相关文章:

java - Eclipse 未将 'Web Content' 部署到根文件夹

java - 无法在 ubuntu 上打开 Talend Open Studio

java - 在 Spring 中配置 ObjectMapper

java - 构建 Maven 时使用多个本地存储库

java - 在 Java 中通过 HTTP Post 发送多行字符串

java - 为什么我们不能让当前类引用持有父类(super class)对象?

java - 升级 Cloudera 的 java 版本有多安全?

Java泛型具有约束的多个参数

java - 使用正则表达式删除前导零但保留减号

java - org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为 'voteService'的bean时出错