13

不要な文字をすべて削除し、ホワイトリストに登録された文字のみを表示する Java コードを作成しようとしています。

例:

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

文字(小文字と大文字)と数字+追加する次の文字だけが必要です。次にfor()、文字列内のすべての文字のサイクルを開始し、ホワイトリストにない場合は空の文字列に置き換えます.

しかし、それは良い解決策ではありません。おそらく、パターン(正規表現)を使用して何らかの方法で実行できますか?ありがとう。

4

2 に答える 2

23

String.replaceAllはい、正規表現を使用することができます:

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

またはグアバでは、次を使用できますCharMatcher

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

これは小文字のバージョンを示しているだけなので、デモが簡単になります。大文字を含めるには"[^A-Za-z0-9\\[\\]]"、正規表現 (および必要なその他の記号) で使用しCharMatcherます。orCharMatcher.inRange('A', 'Z')

于 2013-03-06T13:49:20.890 に答える
2

ホワイトリストにないものすべてを照合して、空の文字列に置き換えることができます。

String in = "asng $%& 123";
//this assumes your whitelist contains word characters and whitespaces, adapt as needed
System.out.println(in.replaceAll( "[^\\w\\s]+", "" )); 
于 2013-03-06T13:51:59.113 に答える