2017-05-26 168 views
2

我有串這樣的:Java的字符串過濾掉不需要的字符

−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou "výborné" <značky>?!. 

而且我想用這個來結束:

häagen-dazs a le & co jsou výborné značky. 

相較於How to filter string for unwanted characters using regex?我想保留重音(變音符號)在字符串中。

我用下面的replaceAll:

str.replaceAll("[¨%=;\\:\\(\\)\\$\\[\\]\\{\\}\\<\\>\\+\\*\\−\\@\\#\\~\\?\\!\\^\\'\\\"\\|\\/]", ""); 
  • 這是正確的做法?
  • 是否有一個更簡單的方法,如何只保留字母數字字符(以及重音),空格和&。 - 符號?
+1

@Tushar這正則表達式將刪除變音符號的字母。 –

+1

嘗試'的replaceAll( 「?(U)[^ \\ p {L} \\ p {N} \\ S&.-]」, 「」)' –

+0

這裏是一個[演示](HTTP:// rextester。 com/TQFI40953)使用Wiktor的評論。 –

回答

1

可以遍歷所有的輸入String人物和測試每一個,如果你想正則表達式匹配保留它,使用這個正則表達式[a-zA-Z& \\-_\\.ýčéèêàâùû]可以分別測試每個字符。

這是你需要的代碼:

String input = "−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou výborné <značky>?!"; 
    StringBuffer sb = new StringBuffer(); 
    for(char c : input.toCharArray()){ 
     if((Character.toString(c).toLowerCase()).matches("[a-zA-Z& \\-_\\.ýčéèêàâùû]")){ 
      sb.append(c); 
     } 
    } 
    System.out.println(sb.toString()); 

演示:

而這裏的a working Demo使用這個代碼,並給出了下面的輸出:

-hagen-dazs. a le & co jsou výborné značky 

注:

  • 它使用input.toCharArray()來獲得一個數組char s並在其上循環。
  • 它使用(Character.toString(c).toLowerCase()).matches("[a-zA-Z& \\-_\\.ýčéèêàâùû]")來測試迭代的char是否與允許的字符Regex匹配。
  • 它使用StringBuffer來構造新的String只允許 允許的字符。
+1

這對我來說是最好的解決方案。對於任何人誰願意支持全捷克/斯洛伐克/德語語言,使用:(Character.toString(C).toLowerCase())相匹配( 「[A-Z&\\ \\ -_äáàâčďéèêěíľňóöřšťùûúůüýž]」) – Michal

0

試試這個

str.replaceAll("[\\\/\.\:\%\!\[\]\(\)\{\}\?\^\*\+\"\'#@$;¨=&<>-~−]", ""); 

你的正則表達式有什麼毛病sintax,我建議你建立一個腳印的正則表達式的步驟,以立即找出是否有是一個錯誤。

嘗試使用本網站的實時測試的正則表達式,這是非常好的

https://regex101.com/

1

您需要使用

String res = input.replaceAll("(?U)[^\\p{L}\\p{N}\\s&.-]+", ""); 

注意,正則表達式以外的任何字符(因爲[^...]是一個否定的字符類)相匹配,一次或多次(由於+量詞):

  • \p{L} - 任何Unicode字母
  • \p{N} - 任何Unicode位數
  • \s - 任何Unicode空白(\s變得支持Unicode由於(?U)直列Pattern.UNICODE_CHARACTER_CLASS改性劑版本)
  • & - 字面&
  • . - 字面.
  • - - 一個連字符(因爲它被放置在字符類末尾

Java demo

import java.util.*; 
import java.lang.*; 

class Rextester 
{ 
    public static void main(String args[]) 
    { 
     String input = "−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou výborné <značky>?!"; 
     input = input.replaceAll("(?U)[^\\p{L}\\p{N}\\s&.-]+", ""); 
     System.out.println(input); 
    } 
} 

輸出:-häagen-dazs a le & co jsou výborné značky