2013-03-06 20 views
9

不要な文字をすべて削除するJavaコードを作成しようとしています。文字列からホワイトリストにない文字をすべて削除します

例:

String[] whitelist = {"a", "b", "c"..."z", "0"..."9", "[", "]",...} 

私はそこに文字のみ(下と大文字)と数字+私が追加することになり、いくつかの次の文字が欲しいです。 その後、文字列内のすべての文字に対してfor()サイクルを開始し、ホワイトリストにない場合は空の文字列に置き換えます。

しかし、それは良い解決策ではありません。たぶんそれは何らかの形でパターン(正規表現)を使って行うことができますか?ありがとう。 GuavaにあなたがCharMatcher使用することができ

String input = "BAD good {} []"; 
String output = input.replaceAll("[^a-z0-9\\[\\]]", ""); 
System.out.println(output); // good[] 

または::ちょうど小文字バージョンを示し

CharMatcher matcher = CharMatcher.inRange('a', 'z') 
          .or(CharMatcher.inRange('0', '9')) 
          .or(CharMatcher.anyOf("[]")); 
String input = "BAD good {} []"; 
String output = matcher.retainFrom(input); 

を、することが容易になり

+1

'多分それはパターン(正規表現)を使用して、何とか行うことができる'うん、あなたは正しいです? 。 [here](http://www.regexplanet.com/advanced/java/index.html)を開始することができます – ppeterka

+0

どのような文字が許可されていますか?要件に応じて、正規表現は大きく異なる可能性があります。 – nhahtdh

答えて

21

はい、あなたは正規表現をとるString.replaceAllを使用することができます実証する。大文字を含めるには、"[^A-Za-z0-9\\[\\]]"を正規表現(および他の任意の記号)で使用します。CharMatcherの場合はorとなり、CharMatcher.inRange('A', 'Z')となります。

+0

最初のコードでregexを使って、次の文字をホワイトリストに追加するにはどうすればいいですか?([と]だけでなく、スペースと次の文字も)? – PerwinCZ

+4

PerwinCZは大文字と小文字を探しているので、 '[^ A-Za-z0-9 \\ [\\]]'にする必要がありますか? – jonhopkins

+0

@jonhopkins:私はちょうどコードにあったことをやっていた - それを明確にするために編集します。 –

2

あなたは試してみて、一致しないすべてのものをホワイトリストにし、空の文字列に置き換えることができます:

String in = "asng $%& 123"; 
//this assumes your whitelist contains word characters and whitespaces, adapt as needed 
System.out.println(in.replaceAll("[^\\w\\s]+", "")); 
関連する問題