略过一些特殊的角色

时间:2017-08-06 16:36:16

标签: java

我需要跳过一些特殊的角色。我已经写了一段代码。但它是纯Java代码。

    String val = menuItemLabelTB.getValue();
    boolean spclCharecterCheck = false;
    String specialCharacters="!#$%&'()*+,.:;=?@[]^`{|}~";

    for (int i = 0; i < val.length(); i++) {
        for (int j = 0; j < specialCharacters.length(); j++) {
            if(val.charAt(i) == specialCharacters.charAt(j))
                spclCharecterCheck = true;
        }
    }

如果我想通过使用regex来最小化复杂性,那么可以这样做吗?或者我是否需要使用任何其他Java内置函数。

2 个答案:

答案 0 :(得分:4)

是的,您可以使用Pattern正则表达式执行此操作。像,

// Note that the literal [](s) have to be escaped below,
String specialCharacters = "[!#$%&'()*+,.:;=?@\\[\\]^`{|}~]";
String val = "a{b}c";
Pattern p = Pattern.compile(specialCharacters);
System.out.println(p.matcher(val).replaceAll(""));

哪个输出

abc

答案 1 :(得分:0)

您可以指定要在字符串中删除的字符,然后使用流删除不需要的字符。

String specialCharacters="!#$%&'()*+,.:;=?@[]^`{|}~";
String val = "a{b}c";

String result = val
            .chars()
            .mapToObj(a -> String.valueOf((char) a))
            .filter(a -> !specialCharacters.contains(a))
            .reduce((t, u) -> t + u)
            .orElse(" ");

    System.out.println(result);

打印出来

abc