Java 如何忽略InputStream中的字符?

Java 如何忽略InputStream中的字符?,java,inputstream,Java,Inputstream,我想要一个InputStream,它将忽略某些字符。例如,对于给定字符串: ch$ron$osy$nclast$ICU in$fundibu$lum 我希望我的InputStream忽略所有$字符,因此它将被读取为: 时辰综合性漏斗 到目前为止,我发现的唯一选择是在JScience库中实现 是否有其他(更快/更常见的)选项可以执行此操作 我更喜欢老办法: StringBuilder sb = new StringBuilder(); int i; while ((i =

我想要一个
InputStream
,它将忽略某些字符。例如,对于给定字符串:

ch$ron$osy$nclast$ICU in$fundibu$lum

我希望我的
InputStream
忽略所有
$
字符,因此它将被读取为:

时辰综合性漏斗

到目前为止,我发现的唯一选择是在JScience库中实现


是否有其他(更快/更常见的)选项可以执行此操作

我更喜欢老办法:

    StringBuilder sb = new StringBuilder(); 
    int i;
    while ((i = is.read()) != -1) {
        char c = (char) i;
        if (c != '$')
            sb.append(c);
    }

    InputStream nis =  new ByteArrayInputStream(sb.toString().getBytes());

您可以在读取输入后通过操纵字符串来执行此操作。使用。至于性能,我不确定哪一个会更快

示例使用:

String a = "ch$ron$osy$nclast$ic_in$fundibu$lum";
String b = a.replaceAll("[$]", "");
//b = "chronosynclastic_infundibulum"

您可以实现自己的
InputStream
来删除这些字符,这样您就不会在应用程序级别处理这些字符。

您可以在读取输入后通过操纵字符串来完成这项操作。使用公共字符串方法replaceAll(stringregex,stringreplacement)至于性能,我不确定哪种方法会更有效faster@Multithreader这肯定不会有效率。很难说这有多有效。或者JScience库的效率有多高。他们可能会使用replaceAll来实现……谁知道呢?您需要进行性能测量,以便得出结论……正如多线程程序所说。我记得读过关于替换(regex)的连续迭代对性能的影响,但是当涉及到各种形式的字符串替换时,很难说“这种方法更好”。@multi-threader不,他们是以更复杂的方式来做的。正如我提到的,我想要一个InputStream,而不仅仅是在控制台中编写它。如果你可以跳过
$
,rest就是转换回InputStream。为方便起见,我添加了代码。