基本数据类型
public class Main { public static void main(String[]args) { // 2进制表示--10进制为3 System.out.println(0b0011); // 16进制表示--10进制为14 System.out.println(0xe); // 8进制表示--10进制为8 System.out.println(010); // 可以在数字中加下划线便于阅读 System.out.println(100_100_100); // 长整型可以加一个'L'作为后缀 System.out.println(1000000000L); // float类型的浮点数后面使用后缀'F',double类型的浮点数后面使用后缀'D', System.out.println(0.01F); System.out.println(0.01D); } } |
数组深拷贝和浅拷贝
Arrays.copyof(原始数组,新数组的长度)
如果数组元素是数值型,那么多余的元素将被赋值为0 ; 如果数组元素是布尔型, 则将赋值为false。相反, 如果长度小于原始数组的长度,则只拷贝最前面的数据元素。
import java.util.Arrays; public class Main { public static void main(String[]args) { int[] arr = {1,2,3,4,5}; int[] cloneArr = arr; int[] p = Arrays.copyOf(arr,arr.length); arr[1] = 10; for (int num: arr) { System.out.printf(num + " "); } System.out.println(); for (int num: cloneArr) { System.out.printf(num + " "); } System.out.println(); for (int num: p) { System.out.printf(num + " "); } } } |
输出:
1 10 3 4 5 1 10 3 4 5 1 2 3 4 5 |
数组排序
import java.util.Arrays; import java.util.Collections; import java.util.Comparator; public class InterfaceTest { public static void main(String[] args) { Integer[] arr = {19,67,55,9,20,35}; // 升序排序 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // 降序排序 // 第一种方法:Collections.reverseOrder() Arrays.sort(arr, Collections.reverseOrder()); System.out.println(Arrays.toString(arr)); // 第二种方法:实现Comparator接口 Arrays.sort(arr, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // o1.compare(o2)返回正数,说明o1比o2大 // 正序排序: o1 - o2 > 0 // 降序排序: o2 - o1 > 0 // return Integer.compare(o2,o1); return o2 - o1; } }); // 更简洁的写法: lambda表达式 Arrays.sort(arr, (o1,o2) -> o2 - o1); System.out.println(Arrays.toString(arr)); } } |
多维数组
每一行的数据长度可以不相等,创建多维数组时必须指定行数
import java.util.Arrays; public class Main { public static void main(String[]args) { final int MAX = 10; // 指定行数 int[][] arr = new int[MAX][]; // 分配行的长度 for (int i = 0; i < MAX; i++) { arr[i] = new int[i+1]; } for (int i = 0; i < MAX; i++) { for (int j = 0; j <= i; j++) { arr[i][j] = j+1; } } for (int[] row : arr) { for (int val: row) { System.out.print(val + " "); } System.out.println(); } // 快速打印二维数组的值 System.out.println(Arrays.deepToString(arr)); } } |
交换数组的任意两行
import java.util.Arrays; public class Main { public static void main(String[]args) { int[][] arr = {{1,2,3},{4,5,6,7}}; int[] tmp = arr[0]; arr[0] = arr[1]; arr[1] = tmp; System.out.println(Arrays.deepToString(arr)); } } |
二维数组复制
public class Main { public static void main(String[]args) { int[][] arr = {{1,2,3},{4,5,6,7}}; // 长度为行数 int[][] arr_copy = Arrays.copyOf(arr,2); System.out.println(Arrays.deepToString(arr_copy)); } } |
不可变字符串
String ans = String.join(",","hello","are","you","ok"); // 使用逗号分隔字符串 System.out.println("hello".equalsIgnoreCase("HEllo")); // true 不区分大小写比较 |
控制台程序
import java.io.Console; public class Main { public static void main(String[]args) { Console console = System.console(); String str = console.readLine("User name: "); char[] password = console.readPassword("password: "); System.out.println(str); for (int i = 0; i < password.length; i++) { System.out.println(password[i]); } } } |
格式化输出
对第i
个参数多次不同的格式化输出
import java.util.Date; public class Main { public static void main(String[]args) { String name = "Alice"; int age = 18; String message = String.format("Hello %s,Next year you will be %d",name,age+1); System.out.println(message); System.out.printf("%.2f%%\n",20*100/100.0); System.out.printf("%1$s %2$tB %2$te, %2$tY\n", "Due date:", new Date()); System.out.printf("%1$.2f,%1$.3f,%1$.4f",100/3.0); } } |
带标签的break
标签必须放在希望跳出的最外层循环之前, 并且必须紧跟一个冒号:
可以将一个标签放在想要跳到的语句块之前,类似于goto
的作用
import java.util.Scanner; public class Main { public static void main(String[]args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); label: for (int i = 0; i < n; i++) { if (i == 10) { System.out.println(i); break label; } else { System.out.println(i); } } } } |
大整数
import java.math.BigInteger; public class Main { public static void main(String[]args) { // 使用字符串创建大整数 BigInteger bigInteger = new BigInteger("11111111111111111111111111111111111111111111111111111111"); // 最大只支持long BigInteger bigInteger1 = BigInteger.valueOf(111111111); // 四则运算+取模 System.out.println(bigInteger.add(bigInteger1)); System.out.println(bigInteger.subtract(bigInteger1)); System.out.println(bigInteger.multiply(BigInteger.valueOf(1111111))); System.out.println(bigInteger.divide(new BigInteger("11111111"))); System.out.println(bigInteger.mod(bigInteger1)); } } |
java匹配一个或多个空格
// 匹配一个或多个空格 String [] words = sentence.split("\\s+"); for (String s : words) { System.out.println(s); } |
BufferedReader和BufferedWriter
BufferedReader读入数据
BufferedWriter输出数据
IO数据大的时候替换Scanner
输入和System.out
输出
import java.io.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); // 一行一行读入 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); bw.write(str); bw.write("\n"); bw.flush(); // 记得刷新缓存 } } |
StringBuilder和StringBuffer
可变字符串,String
是不可变字符串
public class Main { public static void main(String[] args) { StringBuffer sb = new StringBuffer("hello "); sb.append("world!"); System.out.println(sb); // 字符串反转,String没有这个方法 System.out.println(sb.reverse()); StringBuilder builder = new StringBuilder("AAA"); builder.append(" BBB"); System.out.println(builder); } } |