从string中replace非ASCII字符

我有stringA função ,其中我需要用空stringreplace字符,如çãÃ

我怎样才能匹配那些非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; } 

但它不能正常工作..需要什么改善…在这里,我还有一个问题是,最后的string正在被string中创build额外空间的空间字符所取代。

这将search并replace所有非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" 

这样,像“öäü”这样的字符将被映射到“oau”,它至less保留了一些信息。 没有规范化,结果string将是空白的。

这将是Unicode解决scheme

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

\p{InBasic_Latin}是包含Unicode范围U + 0000..U + 007F中所有字母的Unicode块(请参阅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()); 

或者你可以使用下面的函数来从string中删除非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(); }