源码:
public class Demo {
public static void main(String[] args) {
String src = "java 苦逼的,程序 猿。";
// 字符串长度
System.out.println("src length: " + src.length());
// 字符串包含的字符个数
System.out.println("src length constains char: " + fetchCharNumber(src));
// 字符串包含的字节数
System.out.println("src constains byte: " + src.getBytes().length);
}
/**
* 计算字符串的长度.
*
* @param src 需要计算的字符串
* @return -1 表示输入的src是null值
*/
public static int fetchCharNumber(String src) {
int counter = -1;
if (src != null) {
counter = 0;
final int len = src.length();
for (int i = 0; i < len; i++) {
char sigleItem = src.charAt(i);
if (isAlphanumeric(sigleItem)) {
counter++;
} else if (Character.isLetter(sigleItem)) {
counter = counter + 2;
} else {
counter++;
}
}
} else {
counter = -1;
}
return counter;
}
/**
* 判断字符是否为英文字母或者阿拉伯数字.
*
* @param ch char字符
* @return true or false
*/
public static boolean isAlphanumeric(char ch) {
// 常量定义
final int DIGITAL_ZERO = 0;
final int DIGITAL_NINE = 9;
final char MIN_LOWERCASE = 'a';
final char MAX_LOWERCASE = 'z';
final char MIN_UPPERCASE = 'A';
final char MAX_UPPERCASE = 'Z';
if ((ch >= DIGITAL_ZERO && ch <= DIGITAL_NINE)
|| (ch >= MIN_LOWERCASE && ch <= MAX_LOWERCASE)
|| (ch >= MIN_UPPERCASE && ch <= MAX_UPPERCASE)) {
return true;
} else {
return false;
}
}
}
java 苦逼的,程序 猿。
包含: 4字母(java)+ 1空格 + 3汉字 + 1英文逗号 + 2汉字 + 1空格 + 1汉字 + 1中文句号
String 的 length 属性将汉字与英文、数字、标点、空格等都视为 1 个.
那麽,length = 14 个
java 中中文字符占 2 个char,所有的标点符号以及字母数字、空格等占 1 个char .
那麽,char = 20 个
java 中默认编码中文或者中文标点符号占 3 个字节,英文字母或者标点符号等占 1 个字节。
那麽,byte = 4 x 1 + 1 x 1 + 3 x 3 + 1 x 1 + 2 x 3 + 1 x 1 + 1 x 3 + 1 x 3 = 28 个
打印结果:
注意:
// false
System.out.println(Character.isLetter(' '));
// true
System.out.println(Character.isLetter('a'));
// true
System.out.println(Character.isLetter('A'));
// false
System.out.println(Character.isLetter('。'));
// true
System.out.println(Character.isLetter('我'));
// false
System.out.println(Character.isLetter(','));
Character.isLetter 方法,只有是中文或者字母的情况下才会返回 true.