2017-08-06 81 views
0

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

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

    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函数。

+0

是的,它使用正则表达式是可能的,所以现在是时候让你**学习正则表达式**,所以你就会知道如何构建正则表达式模式。 – Andreas

回答

4

是的,你可以用Pattern正则表达式来做到这一点。像,

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

,输出

abc 
+0

谢谢。其实我需要在GWT项目中编译这个Java代码。所以每当我使用模式匹配器。然后它显示编译错误。 –

+0

['import java.util.regex.Pattern;'](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) –

0

您可以指定你想在一个字符串删除,然后使用流删除不想要的字符的字符。

String specialCharacters="!#$%&'()*+,.:;[email protected][]^`{|}~"; 
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 
+0

它工作正常..谢谢 :) –