Sostituisci carattere non ASCII da stringa

Ho delle corde A função , Ãugent in cui ho bisogno di sostituire un carattere come ç , ã , Ã con stringhe vuote.

Come posso abbinare solo quei caratteri non ASCII?

sto usando una funzione

 public static String matchAndReplaceNonEnglishChar(String tmpsrcdta) { String newsrcdta = null; char array[] = Arrays.stringToCharArray(tmpsrcdta); if (array == null) return newsrcdta; for (int i = 0; i  255) array[i] = ' '; } newsrcdta = Arrays.charArrayToString(array); return newsrcdta; } 

ma non funziona correttamente … che miglioramento è necessario … qui ho un altro problema è che la stringa finale viene rimpiazzata dal carattere dello spazio che crea lo spazio extra nella stringa.

Questo cercherà e sostituirà tutte le lettere non ASCII :

 String resultString = subjectString.replaceAll("[^\\x00-\\x7F]", ""); 

La risposta di FailedDev è buona, ma può essere migliorata. Se vuoi preservare gli equivalenti ascii, devi prima normalizzare:

 String subjectString = "öäü"; subjectString = Normalizer.normalize(subjectString, Normalizer.Form.NFD); String resultString = subjectString.replaceAll("[^\\x00-\\x7F]", ""); => will produce "oau" 

In questo modo, personaggi come “öäü” verranno mappati su “oau”, che almeno conserva alcune informazioni. Senza la normalizzazione, la stringa risultante sarà vuota.

Questa sarebbe la soluzione Unicode

 String s = "A função, Ãugent"; String r = s.replaceAll("\\P{InBasic_Latin}", ""); 

\p{InBasic_Latin} è il blocco Unicode che contiene tutte le lettere nell’intervallo Unicode U + 0000..U + 007F (vedi regular-expression.info )

\P{InBasic_Latin} è il \p{InBasic_Latin}

Puoi provare qualcosa come questo. L’intervallo di caratteri speciali per gli alfabeti parte da 192, quindi puoi evitare tali caratteri nel risultato.

 String name = "A função"; StringBuilder result = new StringBuilder(); for(char val : name.toCharArray()) { if(val < 192) result.append(val); } System.out.println("Result "+result.toString()); 

Oppure puoi usare la funzione qui sotto per rimuovere il carattere non-ascii dalla stringa. Potrai conoscere il funzionamento interno.

 private static String removeNonASCIIChar(String str) { StringBuffer buff = new StringBuffer(); char chars[] = str.toCharArray(); for (int i = 0; i < chars.length; i++) { if (0 < chars[i] && chars[i] < 127) { buff.append(chars[i]); } } return buff.toString(); }