2013-03-06 14 views
9

Sto provando a scrivere codice java che rimuove tutti i caratteri indesiderati e lascia che siano solo quelli autorizzati.Rimuovi tutti i caratteri da una stringa che non è nella lista bianca

Esempio:

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

Voglio c'è solo lettere (maiuscole e inferiore) e numeri + alcuni personaggi prossimi vorrei aggiungere. Quindi vorrei avviare il ciclo for() per ogni carattere nella stringa e sostituirlo con una stringa vuota se non è nella whitelist.

Ma questa non è una buona soluzione. Forse potrebbe essere fatto in qualche modo usando il modello (regex)? Grazie.

+1

'Forse potrebbe essere fatto in qualche modo usando il modello (regex)' Sì, hai ragione . È possibile avviare [qui] (http://www.regexplanet.com/advanced/java/index.html) – ppeterka

+0

Che tipo di caratteri sono consentiti? A seconda dei requisiti, la regex potrebbe essere molto diversa. – nhahtdh

risposta

21

Sì, è possibile utilizzare String.replaceAll che prende una regex:

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

O in Guava si potrebbe usare un CharMatcher:

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

che mostra solo la versione minuscola, rendendo più facile dimostrare. Per includere lettere maiuscole, utilizzare "[^A-Za-z0-9\\[\\]]" nella regex (e qualsiasi altro simbolo desiderato) - e per lo CharMatcher è possibilecon CharMatcher.inRange('A', 'Z').

+0

Nel primo codice, usando regex, come aggiungerei i prossimi caratteri alla whitelist (non solo [e], ma anche spazio e caratteri successivi)? – PerwinCZ

+4

Poiché PerwinCZ cerca lettere maiuscole e minuscole, dovrebbe essere '[^ A-Za-z0-9 \\ [\\]]'? – jonhopkins

+0

@jonhopkins: stavo solo andando in quello che era nel codice - editò per chiarirlo. –

2

Si potrebbe provare e abbinare tutto ciò che non è nella lista bianca e sostituirlo con una stringa vuota:?

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