字符串
3.6.1 子串
- substring:包含左不包含右
3.6.2 拼接
- 字符串与非字符串拼接时,会自动将非字符串转换为字符串(tostring)
3.6.3 不可变字符串
- java中的字符串无法修改,当需要修改字符串时,可以用子串操作
3.6.4 检测字符串是否相等
- 由于字符串是一个对象,使用equals方法而不是等于号来判断相等
3.6.9 构建字符串
-
拼接多个小字符串时,使用StringBuilder类下的append方法和toString方法
-
String greeting = "Hello"; String s = greeting.substring(0, 3); // 复制的范围是[0,3) String world = "world"; StringBuilder builder = new StringBuilder(); builder.append(greeting); builder.append(world); builder.toString();
输入与输出
3.7.1 读取输入
-
标准输入流
Scanner in = new Scanner(System.in); System.out.print("What is your name? "); String name = in.nextLine();// nextline:输入一行,包含空格 String firstname = in.next();// next:输入一个单词,遇到空格 // get second input System.out.print("How old are you? "); int age = in.nextInt(); // display output on console System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1));
-
输入密码使用console类的readLine方法
3.7.2 格式化输出
-
java的格式化字符串类似C,也可以用String.format方法格式化字符串
-
具体的转换符用到再查
3.7.3 文件输入与输出
- 注意文件的路径,相对路径是Java虚拟机启动目录的位置,故最好用绝对路径。
- 读取或写入文件时,需要抛出IOE异常
控制流程
3.8.6 中断控制流程的语句
- 带标签的break语句:标签放在希望跳出的最外层循环之前,break之后执行的语句是带标签的语句块末尾
大数
- 使用BigInteger或BigDecimal下的函数做运算,而不能使用运算符
数组
3.10.1 声明数组
-
使用int[] a来声明数组,数组的长度不可变
int[] a = new int[100]; int[] n = {1, 2, 3}; n = new int[] {4,5,6};
-
允许长度为0的数组
3.10.2 访问数组元素
- 数字数组初始化为0;boolean数组初始化为false;对象数组初始化为null。而字符串String是对象,故字符串数组初始化为null。
- 数组的元素个数:a.length
3.10.3 for each循环
- for each循环:集合必须是数组或实现了Iterable接口的对象
3.10.4 数组拷贝
-
直接将一个数组变量赋值给另一个数组变量得到的结果是浅拷贝,即修改其中的一个数组另一个也会改变。
-
要进行深拷贝,可以使用
copyOf(T[] original, int newLength) //第二个参数是新数组的长度,当长度大于源数组时,使用上一节的规则初始化新的元素
-
Java中的数组没有指针运算,分配在堆上
-
使用Arrays.toString得到一个包含数组中所有元素的字符串
3.10.5 命令行参数
- main方法的String[] args参数表示以字符串数组的方式接收命令行参数
3.10.6 数组排序
-
使用以下的方法进行数组排序(源码中使用快排实现)
public static void sort(int[] a) { DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0); }
-
Math.random();//返回0到1之间的随机数
3.10.7 多维数组
-
int[][] b = new int[5][4]; int[][] c = {{1, 2, 3, 4}, {5, 6, 7, 8}}; //二维数组无法使用for each,需要嵌套循环 //二维数组可以使用Arrays.deepToString()打印成字符串。
3.10.8 不规则数组
-
int[][] odds = new int[NMAX + 1][]; for (int n = 0; n <= NMAX; n++) odds[n] = new int[n + 1]; //构造不规则数组需要使用循环