1 java.lang.String
1.1 String对象的创建
- String类在底层其实是一个不可变长度的字符数组.
/** The value is used for character storage. */
private final char value[];
- String的三种创建方式
方式一:
char[] value = new char[]{'a', 'b', 'c'}; String s = new String(value);这种方式的String类型变量s 指向的是一个存放在堆中的String对象的地址.
方式二:
String s = new String("abc");这种方式的String类型变量s 指向的是一个存放在堆中的String对象的地址.
方式三:
String s= "abc";这种方式的String类型变量s 指向的是一个存放在字符串常量池的地址.对应地址存放的数据是"abc". JDK1.8后,字符串常量池被存放在元空间内(实际的物理内存空间中).1.8以前存放在堆中永久代.
1.2 String类方法
1. charAt 查找特定位置字符
- 语法格式;charAt(int index)
- 查找特定位置(index)的字符.返回值类型 char
String s = "abcdef"; char c=s.charAt[3];//c的值为'd'.
2. concat 拼接字符串
- 在字符串后拼接传入的字符串,并返回一个新的字符串,原字符串内容不变.返回值类型 String
- 语法格式:concat(String string)
String s ="abcdef"; String s1= s.concat("ghijk"); System.out.println(s1);//输出 abcdefghijk
3. endsWith & startsWith 判断是否以特定的字符串结尾或开始
- 语法格式:
startsWith(String string);//判断是否以传入字符串开始
startsWith(String string, int offset);//判断是否以传入字符串偏移量在offset位置开始,
startsWith(String string);//判断是否以传入字符串结束- 返回值类型 boolean
String s = "abcdefg"; System.out.println(s.startsWith("ab"));//true System.out.println(s.startsWith("ab", 2));//false System.out.println(s.startsWith("cd", 2));//true System.out.println(s.endsWith("fg"));//true
4. getBytes 将字符串转成字节数组
- 语法格式
getBytes()- 返回值类型 byte[]
String s = "abcdefg"; System.out.println(Arrays.toString(s.getBytes()));//输出[97, 98, 99, 100, 101, 102, 103]
5. indexOf 指定字符或字符串一次出现的位置
- 语法格式:
indexOf(String str )//指定字符串str第一次出现的位置
indexOf(int ch)//指定字符ch第一次出现的位置
indexOf(String str , int fromIndex)//在fromIndex后第一次出现字符串str的位置
indexOf(int ch ,int fromIndex )//在fromIndex后第一次出现字符ch的位置- 返回值类型 int
String s = "abcdefgabcdefg"; System.out.println(s.indexOf("cd"));//输出 2 System.out.println(s.indexOf(98));//输出 1 System.out.println(s.indexOf("cd", 4));//输出 9 System.out.println(s.indexOf('a', 3));//输出 7
6. lastIndexOf 指定字符或字符串最后一次出现的位置
- 语法格式:
lastindexOf(String str )//指定字符串str最后一次出现的位置
lastindexOf(int ch)//指定字符ch最后一次出现的位置
indexOf(String str , int fromIndex)//在fromIndex前最后一次出现字符串str的位置
indexOf(int ch ,int fromIndex )//在fromIndex前最后一次出现字符ch的位置- 返回值类型 int
String s = "abcdefgabcdefg"; System.out.println(s.lastIndexOf("fg"));//输出 12 System.out.println(s.lastIndexOf('f'));// 输出 12 System.out.println(s.lastIndexOf("ab", 10));// 输出 7 System.out.println(s.lastIndexOf('f', 10));// 输出 5
7. length 获取字符串长度
- 语法格式:
length()- 返回值类型 int
String s = "abcdefgabcdefg"; System.out.println(s.length());//输出 14
8. split 以指定字符串分隔字符串
- 语法格式:
split(String regex)//以指定字符串分隔字符串,支持正则表达式,分隔字符串被舍弃
split(String regex,int limit)//分隔字符串后,限制字符串数组的长度,如超过limit则不再进行分隔- 返回值类型 String[]
String s = "a b c d e fgabcdefg"; System.out.println(Arrays.toString(s.split(" ")));//输出 [a, b, c, d, e, fgabcdefg] System.out.println(Arrays.toString(s.split(" ", 3)));//输出[a, b, c d e fgabcdefg]
9. subString 截取字符串
- 语法格式:
substring(int beginIdex)//以beginIndex下标位置开始截取字符串
substring(int beginIdex , int endIndex)//以beginIndex下标位置开始endIndex下标位置为结束截取字符串.[beginIndex,endIndex)结束位置字符不在截取范围内.- 返回值类型 String
String s = "abcdefgabcdefg"; System.out.println(s.substring(2, 4));//输出 cd System.out.println(s.substring(2));//输出 cdefgabcdefg
10. 字符串转大小写
- 语法格式:
toUpperCase()//全部字符转成大写
toLowerCase()//全部字符转成小写- 返回值类型 String
String s = "abcdefgabcdefg"; String s1= s.toUpperCase(); System.out.println(s1);//输出 ABCDEFGABCDEFG System.out.println(s1.toLowerCase());//输出 abcdefgabcdefg
11. trim() 去除字符串收尾两端空格
- 语法格式:
trim()//去除字符串收尾两端空格,中间的保留- 返回值类型 String
String s = " abcdefg abcdefg "; System.out.println(s.trim());//输出:abcdefg abcdefg
2 java.lang.StringBuffer 类&java.lang.StringBuilder 类
- 默认的字符串拼接有与占用资源太大,当多次拼接时有可能造成系统执行缓慢.
- StringBuffer & StringBuilder 称为可变长度字符串.在拼接时可大大提升效率,节省系统资源.
2.1练习: StringBuffer & StringBuilder效率与String效率对比
public class Test {
public static void main(String[] args) {
//输出普通字符串拼接执行时间与StringBuffer拼接时间差值
System.out.println(strappend() - sbappeend());
}
private static long strappend() {
//首先测试String类字符串拼接效率
String s = "abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg";
String s1 = "";
long time =System.currentTimeMillis();
for (int i = 0; i <10000 ; i++) {
s1 +=s;
}
return (time = System.currentTimeMillis() - time);//返回字符串拼接10000次的时间表
}
private static long sbappeend() {
String s = "abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg";
StringBuffer sb =new StringBuffer("");
long time =System.currentTimeMillis();
for (int i = 0; i <10000 ; i++) {
sb.append(s);
}
return (time = System.currentTimeMillis() - time);//返回字符串拼接10000次的时间表
}
}
运行结果:
6058
版权声明:本文为weixin_48214440原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。