如何忽略String / Stream中的某些字符?

时间:2016-04-01 00:43:07

标签: java

让我们说,我写了一些代码来打印出“Hello World”。

我可以使用某种忽略的字符列表从我的打印字符串中忽略(在本例中为Hello World)。例如,我想删除“hello wo r ld”中的r,以便输出为“Hello Wold”

我有一个我正在使用的值。我有以下字符: &,\和*。

我认为其中一个字符导致我忽略了一些值。

通常我会自己测试一下,但此时我无法做到这一点。

2 个答案:

答案 0 :(得分:2)

不知道为什么你会想要这样做,但写一个方法来做到这一点并不是那么难......

public static void printlnWithIgnores(String toPrint, Set<Character> ignore) {
    for(char c : toPrint.toCharArray()) {
        if(! ignore.contains(c)) {
            System.out.print(c);
        }
    }
    System.out.println();
}

至于字符串中由于字符文字而发生的事情,我不确定它是否可能。一些测试:

  • \b(退格符号)无法正常工作
  • (char)127(删除字符)不起作用

也就是说,如果您的密码中可能包含反斜杠(\),那绝对是个问题。 Java中的\用于表示具有以下字符的特殊字符。字符串"nnn"仅为"nnn",但"n\nn"

 n
 n

因为\n代表换行符,所以第三个n会丢失。

有许多这样的专业字符,但更重要的是,您的密码实际上不能包含\而不会导致问题。如果下面的字符带有反斜杠是合法的(and \1 actually is),或者如果它不合法则不会打印出来,如果以下字符,您可以获得转义字符。

答案 1 :(得分:0)

我可能会稍晚一点加入聚会。但我将向您展示如何使用Java 8解决同样的问题。

Java 8很酷!

    List<String> ignore = Arrays.asList("r", "2", "3");
    String text = "Hello world 1 2 3";
    text=toRemove.stream().map(toRem-> (Function<String,String>)s->s.replaceAll(toRem, "")).reduce(Function.identity(), Function::andThen).apply(text);
    System.out.println(text);

<强>输出:

Hello wold 1