1. String类常用方法
基本每个语言都会有很多基础方法,而其实很多类库都是在基础的方法上加以封装;
此节我们来介绍一些String类的常用方法;
1.1. 判断相关
1、public boolean equals (Object anObject)
将此字符串与指定对象进行比较。
2、public boolean equalsIgnoreCase (String anotherString)
将此字符串与指定对象进行比较,忽略大小写。
public class Main {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = "Hello";
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//false
System.out.println(s1.equalsIgnoreCase(s3));//true
}
}
扩展:采坑,java.lang.NullPointerException错误
public class Test {
private String h;
public String getH() {
return h;
}
public void setH(String h) {
this.h = h;
}
}
测试:
public class Main {
public static void main(String[] args) {
Test test = new Test();
boolean equals = test.getH().equals("");// 报错
}
}
这时会抛空指针异常,而不是返回true之类的;
1.2. 获取相关
1、public int length ()
返回此字符串的长度。
public class Main {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = "Hello";
String s4 = "迷思爱";
System.out.println(s1.length());//5
System.out.println(s4.length());//3
}
}
2、public String concat (String str)
将指定的字符串连接到该字符串的末尾。
public class Main {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = "Hello";
String s4 = "迷思爱";
System.out.println(s1.concat(s4));//hello迷思爱
}
}
说明:
+
号运算符也可连接字符串,但是在大量连接字符串时,最好使用concat()
方法,而不应该使用+
;
3、public char charAt (int index)
返回指定索引处的 char值。
String s = "hello world";
//char charAt:获取指定索引处的字符
System.out.println(s.charAt(0));//h
System.out.println(s.charAt(1));//e
4、public int indexOf (String str)
返回指定子字符串第一次出现在该字符串内的索引。
String s = "hello world";
// 获取子字符串第一次出现在该字符串内的索引,没有返回-1
System.out.println(s.indexOf("l"));//2
System.out.println(s.indexOf("wow"));//-1
System.out.println(s.indexOf("ak"));//-1
5、public String substring (int beginIndex)
返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
String s = "hello world";
// 从beginIndex开始截取字符串到字符串结尾
System.out.println(s.substring(0));//hello world
System.out.println(s.substring(5));//world
6、public String substring (int beginIndex, int endIndex)
返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
String s = "hello world";
// 从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
System.out.println(s.substring(0, s.length()));//hello world
System.out.println(s.substring(3,8));//lo wor
1.3. 转换相关
1、public char[] toCharArray ()
将此字符串转换为新的字符数组。
String s = "HelloWorld!";
//char[] toCharArray:把字符串转换为字符数组
char[] chs = s.toCharArray();
System.out.println(Arrays.toString(chs));//[H, e, l, l, o, W, o, r, l, d, !]
2、public byte[] getBytes ()
使用平台的默认字符集将该 String编码转换为新的字节数组。
String s = "HelloWorld!";
byte[] bytes = s.getBytes();
System.out.println(Arrays.toString(bytes));
//[72, 101, 108, 108, 111, 87, 111, 114, 108, 100, 33]
3、public String replace (CharSequence target, CharSequence replacement)
将与target匹配的字符串使用replacement字符串替换。
String str = "misiai com";
String replace = str.replace("mi","MI");
System.out.println("replace = " + replace);
//replace = MIsiai com
1.4. 分割相关
有些特殊符号需要用 反斜杠 \ 转义,在Java要用两个反斜杠 \
public String[] split(String regex)
将此字符串按照给定的regex(规则)拆分为字符串数组。
//String分割
String s = "aa|bb|cc";
String[] strArray = s.split("\\|");
for (String value : strArray) {
System.out.print(value);
}
//aabbcc
1.5. 其他方法
boolean contains(CharSequence s)
判断字符串中是否包含指定字符。
String s = "djlfdjksdlka";
boolean str = s.contains("g");
System.out.println(str);//false
2. StringBuilder
在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,既耗时,又浪费空间。
除了我们上面说的使用string的concat方法外,更好的方式是使用StringBuilder
或者StringBuffer
;
先来说StringBuilder
;
创建对象:
StringBuilder builder = new StringBuilder();
字符串连接
StringBuilder builder = new StringBuilder();
StringBuilder append = builder.append("hello").append("world").append(3.02).append(1);
System.out.println(append.toString());//helloworld3.021
如上所示,StringBuilder
的方法只有几个,主要的、常用 的也就两个:append
,toString
;
append
是一个重载方法,其支持的参数有很多:如上面的字符串,浮点数,整数等等;
toString
就是把append
后的东西转换为字符串而已;
其他方法
reverse
:将结果按字符倒序,如下:
StringBuilder builder = new StringBuilder();
StringBuilder append = builder.append("hello").append("world").append(3.02).append(1);
System.out.println(append.reverse().toString());//120.3dlrowolleh
replace
:替换某些字符
StringBuilder builder = new StringBuilder();
StringBuilder append = builder.append("hello").append("world").append(3.02).append(1);
System.out.println(append.replace(1,3,"wudao"));//1wudao.3dlrowolleh
insert
:在某些位置插入某些字符串,不详细说了;
3. StringBuffer
StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
StringBuffer特点:
- 长度是可变的
- 可以存储不同类型的数据。
- 最终要转成字符串进行使用
- 可以对字符串进行修改。
大致效果和StringBuilder
效果一致,这里就不详细示例代码了;
- 添加:
- StringBuffer append(data);
- StringBuffer insert(index,data);
- 删除
- StringBuffer delete(start,end);包含头,不包含尾。
- StringBuffer deleteCharAt(int index):删除指定位子的元素。
- 查找:
- char charAt(index);
- int indexof(string);
- int lastIndexof(string);
- 修改:
- StringBuffer replace(start,end,string);
- void setCharAt(index,char);
StringBuffer
和StringBuilder
区别:
StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。