一、String字符串
字符串定义后是一个常量
//创建一个hello字符串对象,将其地址保存在str变量中
String str="hello";
str="abc";//这里实际是又创建了一个字符串对象abc,将其地址保存在str变量中
//str只引用最后赋值的字符串地址abc
//字符串实际是一个字符数组
String str2="abc";
char[] list = {
'a','b','c'};
String str3= new String(list);
//这里str2和str3中保存的内容是一样的
如果要频繁更改字符串中的值,建议使用StringBuilder类或StringBuffer类
创建一个字符串对象
1.使用""赋值创建
String str="hello你好";
2.通过构造方法创建
常用构造方法 | 说明 |
---|---|
String() | 创建一个空白字符串对象,实际创建一个空字符数组 |
String(String str) | 创建一个指定的字符串对象,实际是创建一个形参字符串的副本 |
String(char[] list) | 创建一个指定字符数组的字符串对象。 |
String(byte[] list) | 按默认编码格式创建一个指定字节数组的字符串对象。 |
String(byte[] list,String charsetName) | 按指定的编码格式创建一个指定字节数组的字符串对象。 |
字符串常用方法
方法名 | 返回值 | 作用 |
---|---|---|
length() | int | 获取字符串的长度 |
trim() | String | 去除字符串首尾的所有空格 |
toLowerCase() | String | 转换字符串为小写 |
toUpperCase() | String | 转换字符串为大写 |
isEmpty() | boolean | 判断是否为一个空字符串 |
getBytes() | byte[] | 按默认编码格式将字符串转换为字节数组 |
toCharArray() | char[] | 将字符串转换为字符数组 |
equalsIgnoreCase(String str) | boolean | 忽略大小写比较指定字符串是否相同 |
equals(String str) | boolean | 判断字符串是否相同 |
charAt(int index) | char | 获取index位置上的字符串 |
indexOf(String str) | int | 获取str第一次出现的位置,如果没有返回-1 |
lastIndexOf(String str) | int | 获取str最后一次出现的位置,如果没有返回-1 |
contains(字符序列) | boolean | 判断指定的字符序列(字符串)是否存在于原字符串中 |
concat(String str) | String | 将str拼接到原字符串末尾 |
startsWith(String str) | boolean | 判断是否以指定字符串开头 |
endsWith(String str) | boolean | 判断是否以指定字符串结尾 |
substring(int index) | String | 截取原字符串在[index,数组长度)区间内的字符。(从指定位置截取至末尾,包含指定位置) |
substring(int from,int to) | String | 截取原字符串在[from,to)区间内的字符。(从from截取至to,包含from不包含to) |
split(String reg) | String[] | 按指定字符串或正则表达式切分原字符串。如果指定内容不在末尾,n个指定字符能得到n+1个子串;如果指定内容在末尾,n个指定字符能得到n个子串(不包含末尾的无效字符)。 |
String.valueOf(参数) | String | 将一个参数转换为字符串,参数可以是原始类型,也可以是任意对象。 |
replace(char oldChar,char newChar) | String | 使用newChar替换oldChar |
字符串注意事项
在比较字符串是否相同时,要使用String重写的equals方法进行判断。
String中equals方法判断的原理,大致为:将两个字符串保存到字符数组中,再对每个字符逐一比较,如果全部一致则返回。
在使用equals方法时,通常要将已知的非空字符串作为调用者。
二、可变字符串
在程序中,如果要频繁操作某个字符串,一定使用可变字符串类StringBuilder或StringBuffer创建对象。
StringBuilder类
用于表示可变字符串的一个类,是非线程安全的,建议在单线程环境下使用,效率略高于StringBuffer。
StringBuffer类
用于表示可变字符串的一个类,是线程安全的,建议在多线程环境下使用,效率略低于StringBuilder。
StringBuilder和StringBuffer中的方法作用都一致,只不过StringBuffer中的方法使用了synchronized关键字修饰,表示一个同步方法,在多线程环境下不会出现问题。
所以这里以StringBuilder为例。
构造方法
常用构造方法 | 作用 |
---|---|
StringBuilder() | 创建一个大小为16的字符数组。类似于String str=“”; |
StringBuilder(int capacity) | 创建一个指定大小的字符数组 |
StringBuilder(String str) | 创建一个str长度+16的字符串数组后,将str添加到其中。类似于String str=“初始值”; |
普通方法
方法 | 作用 |
---|---|
append(Object obj) | 将指定内容添加到原可变字符串对象末尾 |
delete(int start,int end) | 删除[start,end)范围内的字符 |
deleteCharAt(int index) | 删除指定索引的字符 |
insert(int index,Object obj) | 将obj添加到index位置上 |
replace(int start,int end,String str) | 将[start,end)范围内的字符替换为str |
reverse() | 翻转原字符串 |
注意
-
以上方法都是在直接操作原字符串,每个方法调用后,原字符串都会发生变化。
-
StringBuilder或StringBuffer中并没有重写equlas方法,所以要比较两个可变字符串对象的值是否相同时,需要将可变字符串对象转换为String对象后,调用equals方法比较。
可变字符串与不可变字符串之间的转换
不可变字符串转换为可变字符串
通过创建一个可变字符串对象,将不可变字符串作为参数实现转换
//定义一个不可变字符串对象
String str="hello";
//创建一个可变字符串对象,将不可变字符串对象作为参数
StringBuilder sb = new StringBuilder(str);
可变字符串转换为不可变字符串
通过调用可变字符串的toString()方法实现转换
//创建一个可变字符串对象
StringBuilder sb = new StringBuilder("hello");
//调用toString()转换为String类型
String str=sb.toString();
三、System类
常用属性和方法 | 作用 |
---|---|
System.in | 获取系统输入流对象,通常用于获取输入信息 |
System.out | 获取系统打印输出流对象,通常用于打印普通信息 |
System.err | 获取系统打印输出流对象,通常用于打印异常信息 |
System.exit(int statues) | 终止虚拟机运行,0表示正常结束 |
System.getenv(String key) | 获取系统指定的环境变量信息 |
System.arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,原数组要赋值的元素数量) | 将原数组中指定长度的元素复制到新数组中 |
System.currentTimeMills() | 获取从1970.1.1 0:0:0(UTC)至今经过了多少毫秒。中国是UTC(+8)所以是从1970.1.1 8:0:0至今经过了多少毫秒,返回long类型 |
四、Runtime类
Runtime类的对象,用于表示程序运行时对象(程序运行环境对象)。
包含了程序运行环境相关的信息。常用于获取运行环境信息(如虚拟机内存)或执行某个命令。
特点
这个类不是一个抽象类,但不能创建对象,因为其构造方法是私有的。
但是它提供了一个静态方法getRuntime(),通过这个方法,可以获取一个Runtime类的对象。
五、包装类
**包装类就是原始类型对应的类类型。**包装类通常用于将字符串转换为对应的原始类型。
在web应用中,从浏览器中获取到后台的数据,全是String类型,一定要使用转换的方法。
包装类 | 原始类型 | 将字符串转换为原始类型 |
---|---|---|
Byte | byte | Byte.parseByte(String str) |
Short | short | Short.parseShort(String str) |
Integer | int | Integer.parseInt(String str) |
Long | long | Long.parseLong(String str) |
Float | float | Float.parseFloat(String str) |
Double | double | Double.parseDouble(String str) |
Boolean | boolean | Boolean.parseBoolean(String str) |
Character | char | 无 |
装箱和拆箱
-
所有包装类都有一个静态方法valueOf(原始类型),将某个原始类型的数据转换为相应的包装类对象,这个过程称为装箱。
//手动装箱 int i=123;//定义一个原始类型的数据 Integer aInteger=Integer.valueOf(i);//调用包装类的valueOf()方法将原始类型转换为包装类对象
-
所有包装类都有一个原始类型Value()方法,用于将包装类对象转换为原始类型,这个过程称为拆箱
//手动拆箱 Integer aInteger=new Integer(123);//创建一个包装类对象 int i = aInteger.intValue();//调用包装类的"原始类型