1.4.6大数
import java.math.*;
BigInterger、BigDecimal; 任意长,任意精度
静态方法valueOf将long转换为BigInterger;用字符串构造BigInterger:
BigInterger n = BigInterger.valueOf(123456789012345678L); BigInterger k = new BigInterger("123456789012345678");
java 不允许对象使用操作符,操作大数必须使用方法调用:
BigInterger r = BigInterger.valueOf(5).multiply(n,add(k)); //r=5*(n+k)
1.5 字符串
一系列字符,可包含任何Unicode:"Java\u263A"是"Java☺".
常用Unicode字符:\u2122 即™
1.5.1字符串连接
用加号“+”连接:
int age = 42; String output = age + "years"; System.out.println("Next year,u will be " + age + 1);//Next year,u will be 421 System.out.println("Next year,u will be " + (age + 1));//Next year,u will be 43
几个字符串用分隔符隔开,用join方法:
String names = String.join(",","name1","name2","name3");//name设置为"name1,name2,name3"
字符串数组
大量字符串的连接用StringBuilder;
使用StringBuilder和StringBuffer来构造String
- StringBuilder和StringBuffer都是构造字符串的类,可以使用.append()来增加内容,最后使用toString()来得到String对象,适用于多次、频繁地构建、修改String的时候;
- 区别:多线程构造String的情况下应该使用StringBuffer
1.5.2 子字符串
substring(),第一个参数为起始位置,第二个为字符串不应包含字符起始位;即左闭右开区间;
split(),提出分隔符分割的字符串中所有子字符串,分隔符可以是正则表达式。
1.必须使用equal()方法来判断字符串相等;不能使用’\==’来判断两个String是否相等,这样判断的只是两个String对象是否存在同一位置;因为Java对字符串的实现类似char *,它的==判断只能判断是否存于同一内存地址
2. 区别空串和NULL串
equalsIgnoreCase(),不区分大小写比较
compareTo(),first在字典中排在second前返回负整数,后返回正整数,相等返回0
first.compareTo(second)//比较word和world时,因d在l前面,返回Unicode值之差,-8.
1.5.4 数字与字符串转换
Integer.toString(),第二个参数为转换指定基数。2~36
Integer.parseInt(),字符串转为整数;
Double.toString(),
Double.parseDouble(),字符串转为数字,字符串需要用""
1.5.5 String类API
String类不可变,任何string方法都不能修改自己的字符串;
1.5.6 编码点code point和编码单元 code unit
每个有效的Unicode值称为编码点;
21个比特Unicode中,A的编码点U+0041;
UTF-16中A为\u0041
1.6 输入输出
1.6.1 读取输入
import java.util.*;
要读取字符串和数字,构造一个依附到System.in 的Scanner.
- nextLine(); 从输入读取一行
- next(); 读取单个单词
- nextInt();
- nextDouble();
可以检查是否有另外一行,一个单词、整数、浮点数可以读取:
hasNextLine()、hasNext()、hasNextInt()、hasNextDouble();
import java.util.Scanner;