我有一個字符串 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; }但是它不能正常工作..需要什么改進...這里我還有一個問題是,最終的字符串被空格字符代替,從而在字符串中創建了額外的空間。
3 回答

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
這將搜索并替換所有非ASCII字母:
String resultString = subjectString.replaceAll("[^\\x00-\\x7F]", "");

慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
FailedDev的回答很好,但是可以改進。如果要保留ascii等效項,則需要先進行規范化:
String subjectString = "??ü";
subjectString = Normalizer.normalize(subjectString, Normalizer.Form.NFD);
String resultString = subjectString.replaceAll("[^\\x00-\\x7F]", "");
=> will produce "oau"
這樣,像“??ü”這樣的字符將被映射到“ oau”,這至少保留了一些信息。如果不進行規范化,則結果字符串將為空白。
添加回答
舉報
0/150
提交
取消