今天突然發現android項目中的文字排版良莠不齊的狀況很是嚴重,不得不想辦法解決一下。通過研究以後,終於找到了textview自動換行致使混亂的緣由了----半角字符與全角字符混亂所致!通常狀況下,咱們輸入的數字、字母以及英文標點都是半角,因此佔位沒法肯定。它們與漢字的佔位大大的不一樣,因爲這個緣由,致使不少文字的排版都是良莠不齊的。對此我找到了兩種辦法能夠解決這個問題:
1. 將textview中的字符全角化。即將全部的數字、字母及標點所有轉爲全角字符,使它們與漢字同佔兩個字節,這樣就能夠避免因爲佔位致使的排版混亂問題了。 半角轉爲全角的代碼以下,只需調用便可。 android
/**
* 半角轉換爲全角
*
* @param input
*
@return
*/
public static String ToDBC(String input) {
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == 12288) {
c[i] = (char) 32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}
2. 去除特殊字符或將全部中文標號替換爲英文標號。利用正則表達式將全部特殊字符過濾,或利用replaceAll()將中文標號替換爲英文標號。則轉化以後,則可解決排版混亂問題。 正則表達式
/**
* 去除特殊字符或將全部中文標號替換爲英文標號
*
* @param str
*
@return */ public static String stringFilter(String str) { str = str.replaceAll("【", "[").replaceAll("】", "]") .replaceAll("!", "!").replaceAll(":", ":");// 替換中文標號 String regEx = "[『』]"; // 清除掉特殊字符 Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); return m.replaceAll("").trim(); }