2017-08-06 97 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

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