一、字符串:String类
二、创建String类的对象的两种方式:
2.1.直接赋值法
String str = "abc";
首先看字符串常量池中是否有有"abc",如果有,则返回"abc"的内存地址给str,若没有,则创建"abc",返回"abc"的内存地址给str。
2.2.new关键字创建对象法
String str = new String("abc");
首先在堆内存中创建一个String对象,首先检查字符串常量池中是否有"abc",如果有,则复制一份到堆内存中,如没有,则在字符串常量池中创建"abc",然后复制到对内存中,最终将指针str指向堆内存中创建的字符串对象。
三、字符串类的方法
3.1获取方法
返回值类型 | 函数名 | 作用 |
int | length() | 获取字符串的长度 |
char | chatAt(int index) | 获取特定位置的字符 |
int | iindexOf(Stirng str) | 获取特定字符的位置 |
int | lastIndexOf(char ch) | 获取最后一个字符的位置 |
String str = "hello word"; System.out.println("length():"+str.length()); //11 System.out.println("indexOf():"+str.indexOf("l")); //2 System.out.println("lastIndexOf():"+str.lastIndexOf("l")); //9 System.out.println("indexOf():"+str.indexOf("p")); //-1 System.out.println("charAt():"+str.charAt("1")); //e System.out.println("charAt():"+str.charAt("12")); //java.lang.StringIndexOutBounsException
3.2判断方法
返回值类型 | 函数名 | 作用 |
boolean | endWith(String str) | 是否以指定字符结束 |
boolean | isEmpty() | 是否长度为0 如:“” null V1.6 |
boolean | contains(Char Sequences) | 是否包含指定序列 应用:搜索 |
boolean | equals(Object obj) | 是否相等 |
boolean | equalsIgnoreCase(String anotherString) | 忽略大小写是否相等 |
String str = ""; System.out.println("length():"+str.length()); System.out.println("isEmpty():"+str.isEmpty()); //true String str = "hello java world"; System.out.println("contains():"+str.contains("java")); //true System.out.println("abc".equals("abc")); //true,比较的是内容 System.out.println(new String("abc").equals(new String("abc"))); //比较的是内容 System.out.println(new String("abc").equals(new String("Abc"))); //false System.out.println(new String("abc").equalsIgnoreCase(new String("abc"))); //比较的是内容 str = "Demo.java"; System.out.println("endWith():"+str.endWith(".java")); //true
3.3转换方法
返回值类型 | 函数名 | 作用 |
String | new String(char[] value) | 将字符数组转换为字符串 |
String |
new String(char[] value, int offset, int count) |
|
Static String |
String.valueOf(char[] data) |
将字符数组转换为字符串 |
Static String | valueOf(char[] data, int offset, int count) | |
char[] | toCharArray() | 将字符串转换为字符数组 |
String str = new String(new char[]{'h','e','l','l','o'}); System.out.println(str); char[] chs = str.toCharArrray(); for(int i = 0; i < chs.length ; i++){ System.out.println(chs[i]); } byte[] bs = new byte[] {97,98,99}; String str = new String(bs); System.out.println(str); byte[] bytes= str.getBytes(); for(i = 0; i< bytes.length; i++){ System.out.println(bytes[i]); }
3.4其他方法
返回值类型 | 函数名 | 作用 |
String | replace(char oldChar, char newChar) | 替换 |
String[] | split(String regex) | 以regex为分割符切割 |
String | substring(int beginIndex) | 从指定索引出截取 |
String | substring(int beginIndex, int endIndex) | 指定首尾截取字串 |
String | toUpperCase() | 转大写 |
String | toLowerCase() | 转小写 |
String | trim() | 去除空格 |
四、StringBuffer 字符串缓冲区类
由于String是不可变的,当需要频繁修改字符串对象的场景下,应使用字符串缓冲区类
特点:
1、默认缓冲区的容量是16
2、线程安全,同步,效率低
方法
4.1添加方法
返回值类型 | 函数名 | 作用 |
StringBuffer | new StringBuffer("hello") | 创建字符串缓冲区类 |
append() | 在缓冲区的尾部添加新的文本对象 | |
insert() | 在指定的下标位置添加新的文本对象 |
StringBuffer sb = new StringBuffer("jack"); sb.append(true); sb.append('a'); sb.append(97).append(34.0).append(new char[]{'o','o'}); // 链式编程 System.out.println( sb.toString() ); // 输出缓冲区的中文本数据 sb = new StringBuffer("jack"); sb.insert( 2, "java" ); // jajavack System.out.println( sb.toString() );
4.2查看
返回值类型 | 函数名 | 作用 |
String | toString() | 返回这个容器的字符串 |
int | indexOf(String str) | 返回第一次出现的指定子字符串在该字符串中的索引 |
String | substring(int start) | 从开始的位置开始截取字符串 |
4.3修改
返回值类型 | 函数名 | 作用 |
replace(int start int endString str) |
使用给定 |
|
setCharAt(int index char ch) |
指定索引位置替换一个字符 |
4.5删除
返回值类型 | 函数名 | 作用 |
delete(int start,int end) | s删除起始位置之间的字符,包头不包尾 | |
delete(0,,sb.length()) | 清空缓冲区 | |
deleteCharAt(int index) | 删除指定位置的元素 |
4.6反序
reverse() 把字符串反序输出。