it-swarm-pt.tech

Substituir não ASCII caractere de string

Eu tenho strings A função, Ãugent em que eu preciso substituir caracteres como ç, ã, Ã com strings vazias.

Como posso combinar apenas os caracteres não ASCII?

eu estou usando uma função 

public static String matchAndReplaceNonEnglishChar(String tmpsrcdta)
    {
        String newsrcdta = null;
        char array[] = Arrays.stringToCharArray(tmpsrcdta);
        if (array == null)
            return newsrcdta;

        for (int i = 0; i < array.length; i++)
        {           
            int nVal = (int)array[i];
            boolean bISO = Character.isISOControl(array[i]); // Is character ISO control
            boolean bIgnorable = Character.isIdentifierIgnorable(array[i]); // Is Ignorable identifier
            // Remove tab and other unwanted characters..
            if (nVal == 9 || bISO || bIgnorable)
                array[i] = ' ';
            else if (nVal > 255)
                array[i] = ' ';
        }
        newsrcdta = Arrays.charArrayToString(array);

        return newsrcdta;
    }

mas não está funcionando corretamente ... que melhoria é necessária ... aqui eu tenho mais um problema é que a string final está sendo substituída pelo caractere de espaço que cria o espaço extra na string. 

61
rahulsri

Isto irá procurar e substituir todas as letras nãoASCII:

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

A resposta do FailedDev é boa, mas pode ser melhorada. Se você quiser preservar os equivalentes ascii, você precisa normalizar primeiro:

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

=> will produce "oau"

Dessa forma, caracteres como "öäü" serão mapeados para "oau", que pelo menos preserva algumas informações. Sem a normalização, a String resultante ficará em branco.

64
Michael Böckling

Essa seria a solução Unicode

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

\p{InBasic_Latin} é o bloco Unicode que contém todas as letras no intervalo Unicode U + 0000..U + 007F (consulte regular-expression.info )

\P{InBasic_Latin} é o \p{InBasic_Latin} negado

19
stema

Você pode tentar algo assim. O intervalo de caracteres especiais para alfabetos começa em 192, para que você possa evitar esses caracteres no resultado.

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());
2
mmodi

Ou você pode usar a função abaixo para remover caracteres não ascii da string. Você vai conhecer o funcionamento 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();

    } 
0
Rakesh Chaudhari