最近遇到一个解析 shell 命令返回的表格形式的返回的需求。
由于返回即有中文也有英文,而且返回的项也可能包含空格,故需要计算每列占据的长度,从而截取解析。
但是中文和英文占据的长度不一致,故用到此方法去做处理。
/**
* 输入字符串,计算占据英文长度
*/
public static int getEnLength(String value) {
int valueLength = 0;
String chinese = "[\u0391-\uFFE5]";
/* 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 */
for (int i = 0; i < value.length(); i++) {
/* 获取一个字符 */
String temp = value.substring(i, i + 1);
/* 判断是否为中文字符 */
if (temp.matches(chinese)) {
/* 中文字符长度为2 */
valueLength += 2;
} else {
/* 其他字符长度为1 */
valueLength += 1;
}
}
return valueLength;
}
/**
* 输入英文位数 ,计算实际长度
*
* @param index
* @param row
* @return
*/
public static Integer getActualLength(Integer index, String row) {
if (index == 0 || index == -1) {
return index;
}
String chinese = "[\u0391-\uFFE5]";
Integer tempIndex = 0;
/* 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 */
for (int i = 0; i < row.length(); i++) {
if (tempIndex.equals(index)) {
return i;
}
String str = String.valueOf(row.charAt(i));
/* 判断是否为中文字符 */
if (str.matches(chinese)) {
/* 中文字符长度为2 */
tempIndex += 2;
} else {
/* 其他字符长度为1 */
tempIndex += 1;
}
}
return null;
}