Java常用类:String
String
- 字符串是常量,创建之后不可改变,修改变量的赋值不是修改字符串,而是将变量指向新创建的字符串
- 字符串字面值存在字符串池中,可以共享,JDK8后字符串池在堆中
- 创建字符串变量:
String s = "H";
产生一个对象,字符串池中存储String s = new String("H");
产生两个对象,堆、池中各存储一个。堆中存储new的对象,指向字符串池的字符串,浪费空间
- 在对字符串进行比较时使用
equals()
,String重写了equals方法
String str = new String("H");
String str2 = new String("H");
System.out.println(str==str2);//false,比较的是对象的地址
System.out.println(str.equals(str2));//true,比较字符串的内容
常用方法
length()
:返回字符串的长度
test.length()//10
charAt(int index)
:返回某个位置的字符,下标越界会报错
test.charAt(4)//是
contains(String str)
:是否包含某个字符串
test.contains("java")//true
toCharArray()
:将字符串转换成数组
Arrays.toString(test.toCharArray();//[j, a, v, a, 是, 最, 好, 的, 语, 言]
indexOf(String str, n)
:(从索引n开始)查找str首次出现的下标,存在返回下标,不存在返回-1
test.indexOf("java")//0
LastIndexOf(String str, n)
:(从索引n开始)查找str最后一次出现的下标,存在返回下标,不存在返回-1
test.lastIndexOf("b")//-1
trim()
:去掉字符串前后的空格toUpperCase()
:小写转大写toLowerCase()
:大写转小写endWith(String str)
:判断字符串是否以str结尾startWith(String str)
:判断是否以str开头- replace(char oldChar, char newChar):将旧字符串替换成新字符串
test.replace("java","python")//python是最好的语言
-
split(String str)
:根据str做拆分spilt(" ")
:按照空格拆分[]
表示选择其中的内容,可以用[]
中的其中一个内容进行拆分+
代表切分符号可以出现多个但只切分一次
String s = "java is the best programing language, php not";
String[] arr = s.split("[ ,]+");//[]表示选择其中的内容,可以用空格或逗号拆分;+代表切分符号可以出现多个但只切分一次
for (String string : arr) {
System.out.println(string);
}
//输出
java
is
the
best
programing
language
php
not
equals()
:比较字符串的内容是否相同equalsIgnoreCase()
:忽略大小写的比较compareTo()
:按照字典表的顺序比较大小
String s3 = "xdfg";
String s4 = "asdzb";
System.out.println(s3.compareTo(s4));//23首字母的序号差值,正数则s3>s4
当进行比较的两个字符串的长度不同,但较短的字符串的内容和较长的前部完全相同时,比较的是字符串的长度
String s5 = "asd";
String s6 = "asdfg";
System.out.println(s5.compareTo(s6));//-2,返回值是字符的长度差,相等时为0
substring(int beginIndex, int endIndex)
:切片
可变字符串
StringBuffer
:可变长字符串,JDK1,运行效率慢,线程安全StringBuilder
:可边长字符串,JDK5,运行效率快,线程不安全- 和
String
的区别:- 效率更高
- 节省内存
方法(StringBuffer和StringBuilder通用)
append(内容)
:追加各种类型的内容insert(int offset, 内容)
:在指定索引处插入内容replace(int start, int end, 替换内容)
:在指定位置进行替换delete(int start, int end)
:删除索引中的内容delete(0, str.length())
:清空内容
效率验证
public static void main(String[] args) {
//开始时间
long start = System.currentTimeMillis();
//String 312
// String string = "";
// for (int i = 0; i < 9999; i++) {
// string+=i;
// }
// System.out.println(string);
//StringBuilder:3
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 9999; i++) {
sb.append(i);
}
System.out.println(sb.toString());
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}