我可以用这个:

String str = "TextX Xto modifyX";
str = str.replace('X','');//that does not work because there is no such character ''

是否有一种方法来删除字符X的所有出现从一个字符串在Java?

我尝试了这个,不是我想要的:str.replace('X',' ');//替换为空格


当前回答

你可以使用str = str.replace("X", "");如前所述,你会没事的。“”不是空字符(或有效字符),而“\0”是。

所以你可以使用str = str.replace('X', '\0');代替。

其他回答

使用

public String replaceAll(String regex, String replacement)

将工作。

使用str.replace("X", "");

执行

"Xlakjsdf Xxx".replaceAll("X", "");

返回:

lakjsdf xx

我喜欢在这种情况下使用RegEx:

str = str.replace(/X/g, '');

g是全局的,所以它会遍历你的整个字符串,把所有X替换为"; 如果你想同时替换X和X,你可以简单地说:

str = str.replace(/X|x/g, '');

(看我的小提琴在这里:小提琴)

这里是一个lambda函数,它删除所有作为字符串传递的字符

BiFunction<String,String,String> deleteChars = (fromString, chars) -> {
  StringBuilder buf = new StringBuilder( fromString );
  IntStream.range( 0, buf.length() ).forEach( i -> {
    while( i < buf.length() && chars.indexOf( buf.charAt( i ) ) >= 0 )
      buf.deleteCharAt( i );
  } );
  return( buf.toString() );
};

字符串 str = “TextX XYto modifyZ”; deleteChars.apply( str, “XYZ” ); –> “要修改的文本”

此解决方案考虑到,在删除字符时,生成的字符串(in difference to replace())永远不会比起始字符串大。因此,它避免了在像replace()那样将字符附加到StringBuilder时重复分配和复制。 更不用说replace()中毫无意义的Pattern和Matcher实例的生成,这些实例永远不需要删除。 在difference to replace()中,此解决方案可以一次性删除多个字符。

package com.acn.demo.action;

public class RemoveCharFromString {

    static String input = "";
    public static void main(String[] args) {
        input = "abadbbeb34erterb";
        char token = 'b';
        removeChar(token);
    }

    private static void removeChar(char token) {
        // TODO Auto-generated method stub
        System.out.println(input);
        for (int i=0;i<input.length();i++) {
            if (input.charAt(i) == token) {
            input = input.replace(input.charAt(i), ' ');
                System.out.println("MATCH FOUND");
            }
            input = input.replaceAll(" ", "");
            System.out.println(input);
        }
    }
}

尝试使用重载来接受CharSequence参数(例如,String)而不是char:

str = str.replace("X", "");