Java API
1 String类
(1)String的初始化
1)使用字符串常量直接初始化一个String对象
格式:
String 变量名= 字符串;
例如:
String str1 = null; // 初始化为空
String str2 = ""; // 初始化为空字符串
String str3 = "abc"; // 初始化为abc,其中abc为字符串常量
2)使用String的构造方法初始化字符串对象
格式:
String 变量名 = new String(字符串);
String类中常用的构造方法:
方法声明 | 功能描述 |
---|---|
String() | 创建一个内容为空的字符串 |
String(String value) | 根据指定的字符串内容创建对象 |
String(char[] value) | 根据指定的字符数组创建对象 |
例如:
String str1 = new String(); //创建一个空串""
String str2 = new String("abc"); //创建指定内容字符串
char[] ch = {'a','b','c'}
String str3 = new String(ch); // 根据指定字符数组创建对象
(2)String类常用方法
方法声明 | 功能描述 |
---|---|
int indexOf(int ch) | 返回指定字符在此字符串中第一次出现处的索引 |
int lastIndexOf(int ch) | 返回指定字符在此字符串中最后一次出现处的索引 |
int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引 |
int lastIndexOf(String str) | 返回指定子字符串在此字符串中最后一次出现处的索引 |
char charAt(int index) | 返回字符串中index位置上的字符,其中index的取值范围是:0~(字符串长度-1) |
boolean endsWith(String suffix) | 判断此字符串是否以指定的字符串结尾 |
int length() | 返回此字符串的长度 |
boolean equals(Object anObject) | 将此字符串与指定的字符串比较 |
boolean isEmpty() | 当且仅当字符串长度为0时返回true |
boolean startsWith(String prefix) | 判断此字符串是否以指定的字符串开始 |
boolean contains(CharSequence cs) | 判断此字符串中是否包含指定的字符序列 |
方法声明 | 功能描述 |
---|---|
String toLowerCase() | 使用默认语言环境的规则将String中的所有字符都转换为小写 |
String toUpperCase() | 使用默认语言环境的规则将String中的所有字符都转换为大写 |
static String valueOf(int i) | 返回 int 参数的字符串表示形式 |
char[] toCharArray() | 将此字符串转换为一个字符数组 |
String replace(CharSequence oldstr, CharSequence newstr) | 返回一个新的字符串,它是通过用newstr替换此字符串中出现的所有oldstr得到的 |
String[] split(String regex) | 根据参数regex(regex是一个正则表达式,用来限定分隔规则)将字符串分割为若干个子字符串 |
String substring(int beginIndex) | 返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到此字符串末尾的所有字符 |
String substring(int beginIndex, int endIndex) | 返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到索引endIndex-1角标处的所有字符 |
String trim() | 返回一个新字符串,它去除了原字符串首尾的空格 |
1)转换
String toLowerCase() | 使用默认语言环境的规则将String中的所有字符都转换为小写 |
---|---|
String toUpperCase() | 使用默认语言环境的规则将String中的所有字符都转换为大写 |
char[] toCharArray() | 将此字符串转换为一个字符数组 |
例如:
String str1 = "ABC";
System.out.println("转小写:"+str1.toLowerCase());
String str2 = "abc";
System.out.println("转大写:"+str2.toUpperCase());
String str3 = "abc123";
System.out.println("str3转字符数组:"+ Arrays.toString(str3.toCharArray()));
int a = 123;
System.out.println("其它数据转字符串:"+String.valueOf(a));
2)判断
boolean endsWith(String suffix) | 判断此字符串是否以指定的字符串结尾 |
---|---|
boolean startsWith(String prefix) | 判断此字符串是否以指定的字符串开始 |
boolean isEmpty() | 当且仅当字符串长度为0时返回true |
boolean contains(CharSequence cs) | 判断此字符串中是否包含指定的字符序列 |
boolean equals(Object anObject) | 将此字符串与指定的字符串比较 |
例如:
String str1 = "abc123abc123";
System.out.println("str1是以abc开头吗?"+str1.startsWith("abc"));
System.out.println("str1是以123结尾吗?"+str1.endsWith("123"));
System.out.println("str1是空串吗?"+str1.isEmpty());
System.out.println("str1包含c12吗?"+str1.contains("c12"));
String str2 = "abc123abc123";
System.out.println("str1和str2相同吗?"+str1.equals(str2));
思考:
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println("str1.equals(str2)吗?"+str1.equals(str2));
System.out.println("str1==str2吗?"+(str1==str2));
System.out.println("str1.equals(str3)吗?"+str1.equals(str3));
System.out.println("str1==str3吗?"+(str1==str3));
3)获取
int indexOf(int ch) | 返回指定字符在此字符串中第一次出现处的索引 |
---|---|
int lastIndexOf(int ch) | 返回指定字符在此字符串中最后一次出现处的索引 |
int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引 |
int lastIndexOf(String str) | 返回指定子字符串在此字符串中最后一次出现处的索引 |
char charAt(int index) | 返回字符串中index位置上的字符,其中index的取值范围是:0~(字符串长度-1) |
int length() | 返回此字符串的长度 |
例如:
String str1 = "abc123abc123";
System.out.println("c第一次出现的索引值:"+str1.indexOf("c"));
System.out.println("c最后一次出现的索引值:"+str1.lastIndexOf("c"));
System.out.println("索引值3对应的字符是:"+str1.charAt(3));
System.out.println("字符串长度:"+str1.length());
注意:
charAt(int index) : | 访问字符串中的字符时,不能超出字符的索引范围,否则会出现异常,这与数组中的角标越界异常相似 |
---|
例如:
String str1 = "abc";
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range
System.out.println("索引值5对应的字符是:"+str1.charAt(5));
4)其它
String replace(CharSequence oldstr, CharSequence newstr) | 返回一个新的字符串,它是通过用newstr替换此字符串中出现的所有oldstr得到的 |
---|---|
String[] split(String regex) | 根据参数regex(regex是一个正则表达式,用来限定分隔规则)将字符串分割为若干个子字符串 |
String substring(int beginIndex) | 返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到此字符串末尾的所有字符 |
String substring(int beginIndex, int endIndex) | 返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到索引endIndex-1角标处的所有字符 |
String trim() | 返回一个新字符串,它去除了原字符串首尾的空格 |
例如:替换
String str1 = "abc123abc123";
System.out.println("把123替换成456:"+str1.replace("123","456"));
例如:分割
String str2 = "2021-9-8";
String[] split = str2.split("-");
System.out.println("按照-分割:"+Arrays.toString(split));
例如:截取
String str3 = "abc123abc123";
System.out.println("截取c123abc123:"+str3.substring(2));
System.out.println("截取123abc:"+str3.substring(3,9));
例如:去除空格
String str4 = " hello world ";
System.out.println("截取字符串2端空格:"+str4.trim());
2 StringBuffer类
在Java中,由于String类是final类型的,所以使用String定义的字符串是一个常量,因此它一旦创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。 |
---|
解决方法:可以使用StringBuffer类(也称字符串缓冲区)来操作字符串。 |
说明:StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类似一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,因此并不会产生新的StringBuffer对象。 |
StringBuffer常用方法:
方法声明 | 功能描述 |
---|---|
StringBuffer append(char c) | 添加字符到StringBuffer对象中末尾 |
StringBuffer insert(int offset,String str) | 在StringBuffer对象中的offset位置插入字符串str |
StringBuffer deleteCharAt(int index) | 移除StringBuffer对象中指定位置的字符 |
StringBuffer delete(int start,int end) | 删除StringBuffer对象中指定范围的字符或字符串 |
StringBuffer replace(int start,int end,String s) | 将StringBuffer对象中指定范围的字符或字符串用新的字符串s进行替换 |
void setCharAt(int index, char ch) | 修改指定位置index处的字符 |
String toString() | 返回StringBuffer缓冲区中的字符串对象 |
StringBuffer reverse() | 将此StringBuffer对象用其反转形式取代 |
例如:
StringBuffer sb = new StringBuffer("abc");
sb.append("123");//末尾添加
System.out.println(sb.toString());
sb.insert(3,"def");// 指定位置添加
System.out.println(sb.toString());
sb.setCharAt(6,'g');//修改指定index位置的字符
System.out.println(sb.toString());
sb.replace(3,6,"hello world"); //用新字符串替换指定范围的字符串
System.out.println(sb.toString());
sb.deleteCharAt(14);//根据index删除一个字符
System.out.println(sb.toString());
sb.delete(8,14); //删除指定范围的字符串
System.out.println(sb.toString());
sb.reverse(); //反转
System.out.println(sb.toString());
3 StringBuilder类
StringBuilder与StringBuffer方法基本相同
注意:
String/StringBuffer/StringBuilder区别
String | StringBuffer | StringBuilder |
---|---|---|
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 | StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 | 可变类,速度更快 |
不可变 | 可变 | 可变 |
线程安全 | 线程不安全 | |
多线程操作字符串 | 单线程操作字符串 |
4 System类
System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。 |
---|
System类常用方法:
方法声明 | 功能描述 |
---|---|
static void exit(int status) | 该方法用于终止当前正在运行的Java虚拟机,其中参数status表示状态码,若状态码非0 ,则表示异常终止 |
static void gc() | 运行垃圾回收器,并对垃圾进行回收 |
static native long currentTimeMillis() | 返回以毫秒为单位的当前时间 |
static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length) | 从src引用的指定源数组复制到dest引用的数组,复制从指定的位置开始,到目标数组的指定位置结束 |
static Properties getProperties() | 取得当前的系统属性 |
static String getProperty(String key) | 获取指定键描述的系统属性 |
例如:
long l = System.currentTimeMillis();//当前时间戳
System.out.println(time);
int[] arr = {1,2,3,4};
int[] arr2 = new int[4];
System.arraycopy(arr,1,arr2,2,2);
System.out.println(Arrays.toString(arr2));
5 Date
Date类代表了一个特定的时间,以毫秒的精度
(1)构造方法
//或当前时间对象
Date date = new Date();
//根据时间戳创建Date对象
Date date = new Date(时间戳);
(2)常用方法
//获取当前时间戳 :返回自1970年1月1日以来,由 Date对象表示的00:00:00 GMT的毫秒数。
long time = date.getTime();
6 SimpleDateFormat
格式化和解析日期
如何描述日期和时间格式化的模式
y | “yyyy” —>“2021” |
---|---|
M | “MM” —> “10” |
d | “dd” —> “25” |
H | “HH” —> “15” |
m | “mm” —> “25” |
s | “ss” —> “30” |
例如:
“yyyy-MM-dd HH:mm:ss” | “2021-10-25 15:25:30” |
---|---|
“yyyy/MM/dd HH:mm:ss” | “2021/10/25 15:25:30” |
“yyyy/MM/dd” | “2021/10/25” |
“HH:mm:ss” | “15:25:30” |
“HH-mm-ss” | “15-25-30” |
常用方法-1:
//将日期(Date)格式化成字符串(String)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(new Date());
System.out.println(time);
常用方法-2
//将字符串(String)格式化成日期(Date)
String time = "2021/10/25 15:30:33";
//必须要和字符串中日期和时间格式保持一致
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = sdf.parse(time);
7 Calendar
日历
常用方法-1:
//创建当前时间日历对象
Calendar c = Calendar.getInstance();
//获取年
int year = c.get(Calendar.YEAR);
//获取月
int month = c.get(Calendar.MONTH);//0-11
//获取日
int day = c.get(Calendar.DAY_OF_MONTH);
//获取时(12小时制)
int hour_12 = c.get(Calendar.HOUR);
//获取时(24小时制)
int hour_24 = c.get(Calendar.HOUR_OF_DAY);
//获取分
int minute = c.get(Calendar.MINUTE);
//获取秒
int secod = c.get(Calendar.SECOND);
System.out.println("年:"+year);
System.out.println("月:"+month);
System.out.println("日:"+day);
System.out.println("时(12小时制):"+hour_12);
System.out.println("时(24小时制):"+hour_24);
System.out.println("分:"+minute);
System.out.println("秒:"+secod);
常用方法-2
//创建指定年月日时分秒的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2020,1,20,8,22,33);
//根据时间戳创建Calendar对象
Calendar c2 = Calendar.getInstance();
c2.setTimeInMillis(1635145867208L);
//获取时间戳
long timeInMillis = c2.getTimeInMillis();
System.out.println(timeInMillis);
常用方法-3
//获取日历对象
Calendar c = Calendar.getInstance();
//Calendar转Date
Date date = c.getTime();
//获取日历对象
Calendar c2 = Calendar.getInstance();
//Date对象转Calendar
c2.setTime(date);
8 Random
随机数生成器
常用方法:
Random random = new Random();//创建Randon对象
int num1 = random.nextInt();//随机生成一个整数
int num2 = random.nextInt(10);//随机生成一个[0,10)之间的数
System.out.println("num1="+num1);
System.out.println("num2="+num2);