String
String是一个对象(而不是数组),一旦被创建,其值是不能改变的,但可以使用其他变量重新赋值的方式进行更改。
- 定义一个字符串
String str;
- 字符串的赋值
str = "Hello Java";
str = new String("Hello"); //空字符串
char a[] = {'H','e','l','l','o'}; //从字符数组定义
str = new String(a,1,4); //后两个参数可以省略
//str = "ello"
- String转换为int
n = Integer.parseInt(str)
n = Integer.valueOf(str).intValue()
- int转换为String
str = String.valueOf(n);
str = Integer.toString(n);
str = "" + n; //相对前两种耗时较大
- 字符串的拼接
使用连接运算符“+”:可以与其他类型数据连接,会自动调用自身的 toString() 方法
使用 concat() 方法:只能连接两个字符串
str = "Hello " + "Java" + '!';
str = "Hello ".concat("Java").concat("!");
- 获取字符串长度:
length()
- 字符串的大小写转换:
toLowerCase()
,toUpperCase()
- 去除字符串首尾的空格:
trim()
str = " hello ";
str1 = str.trim();
//str1 = "hello"
- 截取子字符串:
substring()
str.substring(begin, end)
返回str的第begin位至第(end-1)位。 其中参数endIndex可以省略,即返回第begin位至最后一位。
- 字符串的分割:
spilt()
形式:
str.split(String sign)
str.split(String sign,int limit)
返回一个字符串数组。其中参数sign代表分割符,多个分隔符时可以用|
连接。
参数limit为分割后字符串的最大数量,可以省略
String str = "qwq,qaq;q,w,e";
String[] sp = str.split(",|;",4);
for (int i = 0; i < sp.length; i++)
System.out.println(sp[i]);
//sp = {"qwq","qaq","q","w,e"}
- 字符串的分割
replace()
:将目标字符串中的指定字符串替换成新的字符串replaceFirst()
:将目标字符串中匹配某正则表达式的第一个子字符串替换成新的字符串replaceAll()
:将目标字符串中匹配某正则表达式的所有子字符串替换成新的字符串
str = "hello java, hello php!";
str1 = str.replace("hello", "你好");
//str1 = "你好 java, 你好 php!"
- 字符串的比较
equals()
:比较两个字符串的每个字符是否相同,返回布尔值equalsIgnoreCase()
:同上,忽略大小写比较compareTo()
:按字典顺序比较两个字符串的大小,类似C++的strcmp
(从第一个字符开始比较,如果不等,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。试一下就知道了!)
形式:
str1.equals(str2)
str1 和 str2 可以是字符串变量, 也可以是字符串字面量。
注意:不能用==来比较两个字符串。equals() 方法比较字符串对象中的字符,而==运算符比较它们是否引用相同的实例。
- 字符串的查找
根据字符查找:
indexOf()
:返回字符串在另一个字符串中首次出现的索引位置,若找不到则返回-1。lastIndexOf()
:同上,返回最后一次出现的索引位置
形式:
str.indexOf(value,int fromIndex)
其中value为要找的字符串,fromIndex 表示查找时的起始索引,可以省略,默认为0
根据索引查找:
charAt()
:返回字符串内指定索引的字符
StringBuffer
StringBuffer 类是可变字符串类,创建 StringBuffer 类的对象后可以随意修改字符串的内容。每个 StringBuffer 类的对象都能够存储指定容量的字符串,如果字符串的长度超过了 StringBuffer 类对象的容量,则该对象的容量会自动扩大。
- 创建 StringBuffer 类
StringBuffer()
:构造一个空的字符串缓冲区,并且初始化为 16 个字符的容量。StringBuffer(int length)
:创建一个空的字符串缓冲区,并且初始化为指定长度 length 的容量。StringBuffer(String str)
:创建一个字符串缓冲区,并将其内容初始化为指定的字符串内容 str,字符串缓冲区的初始容量为 16 加上字符串 str 的长度。
- 追加字符串:
append()
- 替换字符:
setCharAt()
str.setCharAt(int index, char ch)
该方法的作用是修改对象中索引值为 index 位置的字符为新的字符 ch。
- 反转字符串:
reverse()
- 删除字符串
deleteCharAt()
:移除指定位置的字符delete()
:移出指定位置的子字符串
形式:
str.deleteCharAt(int index)
str.delete(int start, int end) //删除索引为(start, end-1)处的字符
StringBuilder
StringBuilder 类是 JDK 1.5 新增的类,它也代表可变字符串对象。实际上,StringBuilder 和 StringBuffer 功能基本相似,方法也差不多。不同的是,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此在通常情况下,如果需要创建一个内容可变的字符串对象,则应该优先考虑使用 StringBuilder 类。
Tips:
- 空字符串
""
与null
的区分:空字符串是一个长度为0,内容为空的对象;null
是一个空引用,没有分配内存,调用 null 的字符串的方法会抛出空指针异常。