//两个浮点数的相等测试finaldouble EPSILON =1E-14;double x =1.0-0.1-0.1-0.1-0.1-0.1;if(Math.abs(x-0.5)<EPSILON){
System.out.println(x +" is approximately 0.5.");}
3.代码点和代码单元
(1)UTF编码问题:Unicode的代码点可以划分为17个代码级别。代码点从U+0000~
U+FFFF,包括了经典的Unicode代码;其余为附加代码,代码点从U+10000~U+10FFFF),
其中包括一些辅助字符。
而辅助字符采用一对连续的代码单元进行编码。这样的编码值落在基本的多语言级别中
空闲的2048字节中,成为替代区域(U+D800~U+DBFF用于第一个代码单元,U+C000~
U+DFFF用于第二个代码单元)。
(2)大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码
单元表示。
想要得到实际的长度,即代码点数量,可以调用:
int cpCount = greeting.codePointCount(0,greeting.length);
//greeting为字符串
想要得到第i个代码点,可以使用:
int index = greeting.offsetByCodePoint(0,i);
int cp = greeting.codePointAt(index);
import java.util.Scanner;publicclassCodePointTest{publicstaticvoidmain(String args[]){
System.out.print("请输入一串字符串:");
Scanner input =newScanner(System.in);
String s = input.nextLine();int n1 = s.length();//得到代码单元数量
System.out.println(s+"的代码单元数量为:"+n1);int n2 = s.codePointCount(0,n1);//得到代码点数量,即字符串实际的长度
System.out.println(s+"的代码点数量为"+n2);
System.out.print("打印"+s+"的各个代码单元:");for(int i =0;i<n1;i++){
System.out.print(s.charAt(i)+" ");//打印各个代码单元}
System.out.print("\n打印"+s+"的各个代码点:");for(int i =0;i<n2;){int cp = s.codePointAt(i);
System.out.print(Character.toChars(cp));//打印各个代码点
System.out.print(" ");if(Character.isSupplementaryCodePoint(cp)){//判断是否为增补字符
i +=2;}else{
i++;}}int index = s.offsetByCodePoints(0,0);//得到第一个代码点的索引值int cp =s.charAt(index);
System.out.print("\n第一个代码点为:");
System.out.print(Character.toChars(cp));}}