在这里先分别对String、StringBuffer、StringBuilder进行解析,在比较三者异同
String
String类:代表字符串。Java程序中所有的字符串字面值(如"fda")都能作为此类的实现类实现
从下面源码可以看出一下几点:
- String声明为final的,不可被继承
- String实现了Serializable接口:表示字符串是支持序列化的实现了Comparable接口:表示String可以比较大小
- String在内部定义了final的char型数组(final char[]),用于存储字符串数据。 可以得出:String代表一个不可变的字符序列。具有不变性。S
public final class String
implements java.io.Serializable,Comparable<String>,CharSequence {
private final char value[];
String的初始化方式:常用的两种:
//通过字面量的方式定义
String s1 = "java";
//通过new + 构造器方式
String s2 = new String("java2");
String的常用用法详解
- int length():返回字符串的长度
String s1 ="HelloWorld";
System.out.println(s1.length());//10
- char chaeAt():返回索引处(index)的字符
String s1 ="HelloWorld";
System.out.println(s1.charAt(5));//W
- boolean isEmpty():判断是否是空字符串
String s1 ="HelloWorld";
System.out.println(s1.isEmpty());//false
- String toLowerCase():使用默认语言环境,将String中的所有字符转换为小写
String s1 ="HelloWorld";
String s2 = s1.toLowerCase();
System.out.println(s2);//helloworld
- String toUpperCase():使用默认语言环境,将String中的所有字符转换为大写
- String trim():返回字符串的副本,忽略字符串前和字符串后的空白
String s3 = " he ll o w or l d ";
String s4 = s3.trim();
System.out.println("----------" + s4 + "-----------");
//"he ll o w or l d"
- boolean equals():比较两个字符串的内容是否相同
String s6 = "abc";
String s7 = "cde";
System.out.println(s6.equals(s7));//false
- String concat():将指定字符串连接到此字符串的结尾。
String s1 = "abc";
System.out.println(s1.concat("def"))//abcdef
- int compareTo():比较两个字符串的大小
String s6 = "abc";
String s7 = "cde";
int i = s6.compareTo(s7);
System.out.println(i);//-2
- String substring((int beginIndex):返回一个新的字符串,它是此字符串的从 beginIndex开始截取到最后的一个子字符串
String s8 = "你是如此美丽";
String s9 = s8.substring(2);
System.out.println(s9);//如此美丽
- boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列 时,返回 true
String str1 = "helloworld";
String str2 = "wo";
boolean b4 = str1.contains(str2);//true
- int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
String str1 = "helloworld";
System.out.println(str1.indexOf("lo"));//3
//若不存在,返回-1
- int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
String str1 = "helloworld";
System.out.println(str1.lastIndexOf("o"));//6
- String replace(char oldChar, char newChar):返回一个新的字符串,它是 通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
- boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
- String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
String与基本数据类型之间的转换
String转换成基本数据类型、包装类:调用包装类的静态方法:parseXXX(str)
基本数据类型、包装类转换成String:调用String重载的ValueOf(XXX)
String str = "123";
int num = Integer.parseInt(str);//123
double num1 = Double.parseDouble(str);//123.0
String str2 = String.valueOf(num);//"123"
String与char[]之间的转换
String转换成char[]:调用String的toCharArray()
char[]转换成String:调用String的构造器
String str = "abc123";
char[] charArray = str.toCharArray();
for (int i = 0; i < charArray.length; i++) {
System.out.println(charArray[i]);
} // a b c 1 2 3
char[] arr = new char[]{'h','e','l','l','o'};
String str2 = new String(arr);
System.out.println(str2);//"hello"
String与byte[]之间的转换
String转换成byte[]:调用String的getBytes()
byte[]转换成String:调用String的构造器
String str1 = "abc123";
byte[] bytes = str1.getBytes();
System.out.println(Arrays.toString(bytes));//[97, 98, 99, 49, 50, 51]
String str2 = new String(bytes);
System.out.println(str2);//abc123