java找出字符串不同处-找出图中10处安全隐患
一、string.length()方法
/**
* Returns the length of this string.
* The length is equal to the number of Unicode
* code units in the string.
*
* @return the length of the sequence of characters represented by this
* object.
*/
public int length() {
return value.length;
}
返回字符串的长度等于字符串中的 Unicode 代码单元的数目。
Unicodecode units
二、
java内码:unicode(utf-16)中使用的是utf-16.所以上面的那句话再进一步解释就是:返回字符串的长度java找出字符串不同处,这一长度等于字符串中的UTF-16的代码单元的数目。
UTF-X 中的数字 X 就是各自代码单元的位数。
UTF-16 的 16 指的就是最小为 16 位一个单元,也即两字节为一个单元,
码点(身份证号):U+XXXXXX 是码点的表示形式,X 代表一个十六制数字,可以有 4-6 位,不足 4 位前补 0 补足 4 位,超过则按是几位就是几位。
字符A 65 十六进制41,码点表示就是U+0041;
字符B 码点表示就是U+0042;
汉字"你"的字符表示是“U+4F60”;
”彬“字符”“ 5f6c
汉字"杨"的字符表示是“U+6768”;
## 获取正确的字符个数
String.length() 为了历史兼容,不再维护了;他返回的就是码单UnicodeUnit个数;1个或2个
System.out.println(B.codePointCount(0,B.length())); 可以返回码点个数;
#代码点数和代码单元关系
它的代码点是U+1D11E,
但它的代理单元是U+D834和U+DD1E,【也叫代码单元】
,那么机器会识别它是2个代码单元代理java找出字符串不同处,但是是1个代码点(那个音符字符),故而,length的结果是代码单元数量2,而codePointCount()的结果是代码点数量1.
BMP(Basic Multilingual Plane 基本多语言平面)
SP(Supplementary Planes)补充平面
代理区(Surrogate Area)