Заменить не ASCII символ из строки
у меня есть строки A função
,Ãugent
в котором мне нужно заменить символ, как ç
,ã
,Ã
С пустыми строками.
как я могу соответствовать только этим не ASCII символов?
Я использую функцию
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;
}
но это не работает должным образом..какое улучшение необходимо...здесь у меня есть еще одна проблема заключается в том, что конечная строка заменяется пробелом, который создает дополнительное пространство в строке.
5 ответов:
Это будет искать и заменять все non ASCII письма:
String resultString = subjectString.replaceAll("[^\x00-\x7F]", "");
ответ FailedDev хорош, но может быть улучшен. Если вы хотите сохранить эквиваленты ascii, вам нужно сначала нормализовать:
String subjectString = "öäü"; subjectString = Normalizer.normalize(subjectString, Normalizer.Form.NFD); String resultString = subjectString.replaceAll("[^\x00-\x7F]", ""); => will produce "oau"
таким образом, символы типа "öäü" будут сопоставлены с "OAE", что, по крайней мере, сохраняет некоторую информацию. Без нормализации результирующая строка будет пустой.
это будет решение Unicode
String s = "A função, Ãugent"; String r = s.replaceAll("\P{InBasic_Latin}", "");
\p{InBasic_Latin}
- это блок Юникода, который содержит все буквы в диапазоне Юникода U + 0000..U + 007F (см. regular-expression.info)
\P{InBasic_Latin}
это отрицается\p{InBasic_Latin}
вы можете попробовать что-то вроде этого. Диапазон специальных символов для алфавитов начинается от 192, поэтому вы можете избежать таких символов в результате.
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());
или вы можете использовать ниже функцию для удаления символа не ascii из строки. Вы получите знать внутреннюю работу.
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(); }