String类型是基于字符数组实现的。
它只能判断是否存在字符, 不能判断是否存在空格的情况.
String src = " "; System.out.println(src.isEmpty()); // false可以使用StringUtils的方法进行判空。
length是最常用到的方法, 它通常用于计算String的长度。注释:
The length is equal to the number of Unicode code units in the string.就是说字符串的长度等于代码单元的长度。通常情况下, 一个代码单元可以表示大部分的字符, 但是别忘了增补字符的存在, 增补字符需要用2个char类型表示。
// 从其它博客copy的例子 String sentence = "\u03C0 \uD835\uDD6B"; // 该字符串的第二个(从一开始计)字符是空格 System.out.println(sentence); //π ? int lengthU = sentence.length(); System.out.println(lengthU); // 4See? 其实只有3个字符, 但是length方法计算的是代码单元, 因此得到4。 ===> 当字符串中没有增补字符, length()才等于字符的个数。
可以调用Character.codePointCount来查看unicode代码点的数量 ==> 字符的数量=代码点的数量。
char[] chars = {'\u03C0', ' ','\uD835', '\uDD6B'}; System.out.println(Character.codePointCount(chars, 0, chars.length)); //3从1.5开始, 代码点表示与字符集中某个字符对应的数字, 通常用16进制来表示这个值。
显示索引处的字符, 注意假如该字符的代码点在代理范围内, 则不会正常显示.
char[] chars = {'\u03C0', ' ','\uD835', '\uDD6B'}; System.out.println(chars[3]); 输出: ?查看索引处的代码点。假如索引i处为高代理范围的代码点, i+1为低代理范围代码点, 则返回该增补字符的代码点。
String testSentence = "\u03C0 \uD835\uDD6B"; int cp = testSentence.codePointAt(2); System.out.println(cp); System.out.println("\\uD835的十进制为:" + (int)'\uD835'); 输出: 120171 \uD835的十进制为:55349查看索引index - 1的代码点, 假如index - 1为低代理范围, index - 2为高代理范围, 则返回index - 1和index - 2表示的增补字符的代码点。
// testSentence = "\u03C0 \uD835\uDD6B" int cp = testSentence.codePointBefore(testSentence.length()); System.out.println(cp);查看代码点的数量
// testSentence = "\u03C0 \uD835\uDD6B" int cp = testSentence.codePointCount(0, testSentence.length()); System.out.println(cp); // 3假如字符串的范围不存在代理对, 那么每个字符对应一个代码点
// testSentence = "\u03C0 \uD835" int cp = testSentence.codePointCount(0, testSentence.length()); System.out.println(cp); // 3从索引index处偏移codePointOffset个代码点得到的索引
// testSentence = "\u03C0 \uD835\uDD6B\u03C0"; int cp = testSentence.offsetByCodePoints(0, 3); System.out.println(cp); //4当存在增补字符时该方法才会有明显的效果
比较的思路是: 1.参数是否String的实例 2.按顺序比较数组的字符
比较思路—— 1.比较数值 2.转为大写比较 3.转为小写比较
while (len-- > 0) { char c1 = ta[to++]; char c2 = pa[po++]; if (c1 == c2) { continue; } if (ignoreCase) { char u1 = Character.toUpperCase(c1); char u2 = Character.toUpperCase(c2); if (u1 == u2) { continue; } if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) { continue; } } return false; }将每个位置的char值相减来得到先后顺序。
等待更新…