从给定字符串中删除所有字符

时间:2016-04-11 04:33:33

标签: java string data-structures replace time-complexity

如何修改我的代码,以便删除O(n)中另一个字符串中给定字符串(而不仅仅是字符串)中的所有字符?如果使用其他数据结构会有所帮助,请同时提示。

public static String removeChar(String s, char ch){
    StringBuilder sb= new StringBuilder();
    char[] charArray= s.toCharArray();
    for (int i=0; i<charArray.length; i++){
        if (charArray[i]!=ch) {
            sb.append(charArray[i]);
        }
    }

    return sb.toString();
}

有更快的方法吗?

更新:我想写一个像removeAllCharsInSecondStringFromFirstString(String S1, String S2)

这样的新函数

4 个答案:

答案 0 :(得分:2)

而不是迭代String的每个字符,您可以使用String.indexOf(int)和循环在ch间隔之间添加每个子字符串。像,

public static String removeChar(String s, char ch) {
    StringBuilder sb = new StringBuilder();
    int p1 = 0, p2 = s.indexOf(ch);
    while (p2 > -1) {
        sb.append(s.substring(p1, p2));
        p1 = p2 + 1;
        p2 = s.indexOf(ch, p1);
    }
    if (p1 < s.length()) {
        sb.append(s.substring(p1, s.length()));
    }
    return sb.toString();
}

答案 1 :(得分:1)

如果您真的想自己实现,可以使用Set来包含要删除的字符集合。这是一个让你入门的模板:

public static String removeAllChars(String source, String charsString) {
  HashSet<Character> chars = new HashSet<>();
  for (int i = 0; i < charsString.length(); i++) {
    chars.add(charsString.charAt(i));
  }

  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < source.length(); i++) {
    // chars.contains(source.charAt(i)) is O(1)
    // use this to determine which chars to exclude
  }
  return sb.toString();
}

答案 2 :(得分:1)

借助dimo的提示和帮助,我写了这个解决方案:

public static String removeAllChars(String src, String dst){
    HashSet<Character> chars = new HashSet<>();
    char[] dstCharArray=dst.toCharArray();
    for (int i=0; i<dstCharArray.length; i++){
        chars.add(dstCharArray[i]);
    }
    StringBuilder sb = new StringBuilder();
    char[] srcCharArray = src.toCharArray();
    for (int i=0; i<srcCharArray.length; i++){
        if (!chars.contains(srcCharArray[i])){
            sb.append(srcCharArray[i]);
        }
    }
    return sb.toString();

}

答案 3 :(得分:0)

尝试使用它。

删除所有无数值

String str = "343.dfsdgdffsggdfg333";
str = str.replaceAll("[^\\d.]", "");

输出将为您提供“343.333”

如果您将来需要删除数字和特殊值,请尝试使用

String str = "343.dfsdgdffsggdfg333";
string = string.replace(/[^a-zA-Z0-9]/g, '');