我有一个字符串 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;
}
Run Code Online (Sandbox Code Playgroud)
但它没有正常工作......需要多大改进...这里我还有一个问题是最后的字符串被空格字符替换,这会在字符串中创建额外的空间.
Fai*_*Dev 145
这将搜索并替换所有非ASCII字母:
String resultString = subjectString.replaceAll("[^\\x00-\\x7F]", "");
Run Code Online (Sandbox Code Playgroud)
Mic*_*ing 67
FailedDev的答案很好,但可以改进.如果要保留ascii等效项,则需要先进行规范化:
String subjectString = "öäü";
subjectString = Normalizer.normalize(subjectString, Normalizer.Form.NFD);
String resultString = subjectString.replaceAll("[^\\x00-\\x7F]", "");
=> will produce "oau"
Run Code Online (Sandbox Code Playgroud)
这样,像"öäü"这样的字符将被映射到"oau",这至少会保留一些信息.如果没有规范化,生成的String将为空.
ste*_*ema 19
这将是Unicode解决方案
String s = "A função, Ãugent";
String r = s.replaceAll("\\P{InBasic_Latin}", "");
Run Code Online (Sandbox Code Playgroud)
\p{InBasic_Latin}
是一个包含以Unicode范围内的所有字母的Unicode块U + 0000..U + 007F(参照regular-expression.info)
\P{InBasic_Latin}
被否定了 \p{InBasic_Latin}
归档时间: |
|
查看次数: |
111931 次 |
最近记录: |