从字符串中删除某些字符

eka*_*was 18 java

我正在考虑使用String.replaceAll()删除字符串中的某些字符.目前还不清楚哪些字符会被删除(即哪些字符我想删除),但我认为任何字符是有效的(像[a-zA-Z]之类的东西$%!,等等).

我遇到了http://www.java-tips.org/java-se-tips/java.lang/strip-certain-characters-from-a-string.html但肯定有一种比迭代每个角色更好的方法...

有什么想法吗?

谢谢

例:

为了澄清,我会有不同长度的字符串.我想从中删除字符,确切的在运行时确定,并返回结果字符串.

采取上面的段落,并允许我删除" ,.",我会返回字符串:

只是为了澄清我将拥有不同长度的字符串我想从中删除要在运行时确定的确切字符并返回结果字符串

顺便说一句,我知道replaceAll()使用正则表达式,所以如果我想删除字符"$,.",我也需要逃避它们,对吧?

Abd*_*aly 19

您可能希望首先指定要保留的字符,尝试以下方法:

"mystring".replaceAll("[^a-zA-Z]", "")?
Run Code Online (Sandbox Code Playgroud)

只保留信件.


Pri*_*ley 13

我想,下面的代码会对你有所帮助.

    String input = "Just to clarify, I will have strings of varying "
      + "lengths. I want to strip characters from it, the exact "
      + "ones to be determined at runtime, and return the "
      + "resulting string.";
    String regx = ",.";
    char[] ca = regx.toCharArray();
    for (char c : ca) {
        input = input.replace(""+c, "");
    }
    System.out.println(input);
Run Code Online (Sandbox Code Playgroud)

  • 这绝对是一种性能损失。我个人更喜欢下面采用的“StringBuilder”方法 (2认同)

Whi*_*g34 11

这是正则表达式可能不是一个好主意的情况之一.你最终会编写更多特殊代码来解决正则表达式,而不是只采用简单的方法并迭代字符.您还可能会忽略某些可能在以后出现错误的情况.

如果你担心性能,正则表达式实际上要慢得多.如果您查看代码或配置文件的使用,正则表达式必须创建一个模式来解析/编译,运行匹配的逻辑,然后应用您的替换.所有这些都会产生很多对象,如果你频繁地迭代它,这可能会很昂贵.

我会以不同的方式实现您在该链接上找到的内容.您可以节省不必要的String分配,因为它构建结果时没有任何额外的复杂性:

public static String stripChars(String input, String strip) {
    StringBuilder result = new StringBuilder();
    for (char c : input.toCharArray()) {
        if (strip.indexOf(c) == -1) {
            result.append(c);
        }
    }
    return result.toString();
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*vis 11

如果您已经在使用该库,Guava可以使用CharMatcher轻松实现

String charsToRemove = "%^#";
String stringToFilter = "I have 20% of my assets in #2 pencils! :^)";

String filtered = CharMatcher.anyOf(charsToRemove).removeFrom(stringToFilter);
Run Code Online (Sandbox Code Playgroud)