一、什么是API
就是别人写好的一些类,给咱们程序员直接拿去调用即可解决问题的
我们之前接触过的Scanner和Random都是API
但java中提供的API很多,我们没有必要去学习所有的API,只需要知道一些常用的API,再借助帮助文档去使用API
二、API帮助文档的使用
1、点击左上角显示->索引,搜索我们需要使用的类
2、使用一个类之前,先看这个类所在的包,如果这个类所在的包是java.lang,则不需要编写导包代码,反之则需要写导包代码(如:import java.util.Scanner)
3、看这个类的介绍
4、看这个类的构造方法,根据构造方法才能将这个对象创建出来
5、看这个类的成员方法,看介绍、方法名、返回值、参数
三、String
String中的成员方法都不会修改原字符串
来自java.lang包,不需要编写导包代码
String是啥?
String
类代表字符串。Java 程序中的所有字符串字面值(如 "abc"
)都作为此类的实例实现(例如:String s = "abc"可直接创建字符串对象)。
String常见构造方法
// public String() : 创建一个空白字符串, 里面不含任何内容
String s1 = new String();
System.out.println(s1);
// public String(char[] chs) : 根据传入的字符数组, 创建字符串对象
char[] chs = {'a','b','c'};
String s2 = new String(chs);
System.out.println(s2); // "abc"
// public String(String original) : 根据传入的字符串, 来创建字符串对象
String s3 = new String("abc");
System.out.println(s3);
上面三种方法只是常见,并非常用,最常用的还是String s = "abc"
equals:字符串比较(区分大小写)
s1.equals(s2); //将s1的内容与s2的内容进行比较,返回一个布尔值(相同为true)
equalsIgnoreCase:字符串比较(不区分大小写)
使用方法和equals一样
toCharArray:将字符串转换成字符数组(常用于字符串遍历)
用这种方式遍历字符串效率更高!
String s = "abc";
char[] c = s.toCharArray();
length:返回字符串长度
注意:字符串中的length是一个方法,所以需要用s.length()
而数组中的length是一个属性,所以直接arr.length
s.length();
charAt:返回指定索引处的char值(常用于字符串遍历)
for(int i=0;i<s.length;i++){
s.charAt(i);
}
substring:字符串截取
传一个参数:从beginIndex开始截取到结尾(包含beginIndex)
String s = "itheima";
String result = s.substring(2); //heima
传两个参数:从beginIndex开始截取到endIndex(包含beginIndex,不包含endIndex)
String s = "itheima";
String result = s.substring(0,2); //it
replace:字符串替换
String s = "itheima";
String result = s.replace("heima","baima"); // itbaima
split:字符串切割
String s = "192,168,1,1";
String[] sArr = s.split(",");
for (int i = 0; i < sArr.length; i++) {
System.out.println(sArr[i]); //{192,168,1,1}
}
建议: 先正常指定切割规则, 后来发现没有得到自己要的效果, 就可以尝试在规则前面, 加入 \\
String s = "192+168+1+1";
String[] sArr = s.split("\\+");
for (int i = 0; i < sArr.length; i++) {
System.out.println(sArr[i]); //{192,168,1,1}
}
四、StringBuilder
StringBuilder通常会修改原字符串内容
StringBuilder是啥?
StringBuilder类中的方法可大大提高字符串的操作效率!!!
来自java.lang包,不需要编写导包代码
StringBuilder是一个可变的字符序列,而Sring是一个不可变的字符序列
StringBuilder是字符串缓冲区, 将其理解是容器, 这个容器可以存储任意数据类型, 但是只要进入到这个容器, 全部变成字符串
一个有趣的例子:
public static void main(String[] args) {
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for(int i = 1; i <= 100000; i++){
sb.append(i);
}
System.out.println(sb);
long end = System.currentTimeMillis();
System.out.println(end - start); // 运行时间:10毫秒
}
private static void method() {
// 获取1970年1月1日0时0分0秒到现在所经历过的毫秒值 (1秒 = 1000毫秒)
long start = System.currentTimeMillis();
String s = "";
for(int i = 1; i <= 100000; i++){
s += i;
}
System.out.println(s);
long end = System.currentTimeMillis();
System.out.println(end - start); // 运行时间:2804毫秒
}
StringBuilder的构造方法
public StringBuilder() : 创建一个空白的字符串缓冲区(容器), 其初始容量为16个字符(若后续追加超过16则自动扩容)
public StringBuilder(String str) : 创建一个字符串缓冲区(容器), 容器在创建好之后, 就会带有参数的内容
StringBuilder sb = new StringBuilder(); //空字符串,初始长度为16,若后续追加超过16则自动扩容
StringBuilder sb = new StringBuilder("abc");
append:追加,返回对象自己
append(任意类型)
sb.append("红色").append("绿色").append("蓝色");
reverse:反转字符串,返回对象自己
String s = "abc";
s.reverse(); //"cba"
length:返回字符串长度
太简单了,不想多说了
toString:将StringBuilder转化成String并返回
应用场景:我数据在StringBuilder当中, 我要调用的方法是split, 但split在StringBuilder没有, 但是String有
解决: 转换为String, 再调用
StringBuilder和StringBuffer基本一样,只是StringBuilder线程不安全(但执行效率高一些),StringBuffer线程安全(但执行效率低一些)
五、Math工具类
来自java.lang包,不需要编写导包代码
Math类没有对外提供构造方法,且其中所有的成员方法都被static所修饰,所以这是一个工具类,我们调用其中的成员方法直接 类名.方法
public static int abs (int a) : 获取参数绝对值
public static double ceil (double a) : 向上取整
public static double floor (double a) : 向下取整
public static int round (float a) : 四舍五入
public static int max (int a, int b) : 获取两个int值中的较大值
public static double pow (double a,double b) : 返回a的b次幂的值
public static double random () : 返回值为double的随机值,范围[0.0,1.0)
System.out.println(Math.abs(-123)); // 123
System.out.println(Math.abs(-12.3)); // 12.3
System.out.println("---------------------");
System.out.println(Math.ceil(12.0)); //12.0
System.out.println(Math.ceil(12.2)); //13.0
System.out.println(Math.ceil(12.5));
System.out.println(Math.ceil(12.9));
System.out.println("---------------------");
System.out.println(Math.floor(12.0)); //12.0
System.out.println(Math.floor(12.2)); //12.0
System.out.println(Math.floor(12.5));
System.out.println(Math.floor(12.9));
System.out.println("---------------------");
System.out.println(Math.round(3.4)); //3
System.out.println(Math.round(3.6)); //4
System.out.println("---------------------");
System.out.println(Math.max(10, 20)); //20
System.out.println(Math.min(10, 20)); //10
System.out.println("---------------------");
System.out.println(Math.pow(2, 3)); //8
System.out.println("---------------------");
System.out.println(Math.random());
六、Arrays工具类
public static String toString (类型[] a) : 将数组元素拼接为带有格式的字符串
如果希望不遍历数组就看到数组中的每个元素,可用该方法将数组转成字符串并打印在控制台上
public static boolean equals (类型[] a, 类型[] b) : 比较两个数组内容是否相同
public static int binarySearch (int[] a, int key) : 查找元素在数组中的索引 (二分查找法: 保证数组的元素是排好序的)。如果查找的元素在数组中不存在: 返回 (-(插入点) - 1)
public static void sort (类型[] a) : 对数组进行默认升序排序
int[] arr1 = {11, 22, 33, 44, 55};
int[] arr2 = {11, 22, 33, 44, 66};
// 将数组元素拼接为带有格式的字符串
System.out.println(Arrays.toString(arr1));
// 比较两个数组内容是否相同
System.out.println(Arrays.equals(arr1, arr2));
// 查找元素在数组中的索引
System.out.println(Arrays.binarySearch(arr1, 33));
System.out.println(Arrays.binarySearch(arr1, 66));
int[] nums = {22, 11, 55, 44, 33};
System.out.println(Arrays.binarySearch(nums, 11)); // 1
Arrays.sort(nums);
System.out.println(Arrays.binarySearch(nums, 11)); // 0
// 对数组进行默认升序排序
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));