Java常用类(4)- String类
String类概述
- 字符串是常量,创建之后不可改变
- 字符串字面值存储在字符串池中,可以共享
- String s = "hello";//产生一个对象,字符串池中存储
- String s = new String("hello");//产生两个对象,堆、池各存储一个
- jdk版本不同,字符串池存放位置不同,新版本一般放在堆中,旧版本一般放在方法区中;本篇暂定在方法区中,和堆先区分开,便于理解
package commonclass.stringclass; public class Demo01 { public static void main(String[] args) { String name = "hello";//"hello"常量存储在字符串池中 name = "zhangsan";//"zhangsan"赋值给name变量,给字符串赋值时,并没有修改数据,而是重新开辟了一个空间 String name2 = "zhangsan";//栈中的地址和name一致 System.out.println(name==name2);//true //字符串另一种创建方式 String str = new String("hello java"); String str1 = new String("hello java"); System.out.println(str==str1);//false
System.out.println(str.equals(str1));//true,比较的是内容
}
}
常用方法
length()
返回字符串长度
String content="java编程语言"; System.out.println(content.length()); //结果:8
charAt(int index)
返回某个位置的字符
String content="java编程语言"; System.out.println(content.charAt(4)); //结果:编
contains(String str)
判断是否包含某个字符串
String content="java编程语言"; System.out.println(content.contains("java")); //结果True
toCharArray()
将字符串转换成数组
String content="java编程语言"; System.out.println(content.toCharArray()); //结果: /* j a v a 编 程 语 言 */ System.out.println(Arrays.toString(content.toCharArray())); //结果:[j, a, v, a, 编, 程, 语, 言]
indexOf(String str)
查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1
String content="java编程语言,java开发 java测试"; System.out.println(content.indexOf("java")); //结果:0 System.out.println(content.indexOf("java",5));//从下标为5开始找 //结果:9
lastIndexOf(String str)
查找str在当前字符串中最后一次出现的下标索引
String content="java编程语言,java开发 java测试"; System.out.println(content.lastIndexOf("java")); //结果:16
trim()
去掉字符串前后的空格
String content = " java is good "; System.out.println(content.trim()); //结果:java is good
toUpperCase()/toLowerCase()
将小写转成大写/转换成小写
String content = " java is good "; System.out.println(content.toUpperCase()); //结果: JAVA IS GOOD
endWith(String str)/startWith(String str)
判断字符串是否以str结尾/判断字符串是否以str开头
String content = " java is good "; System.out.println(content.endsWith(" "));//是否以空格结尾 //结果:true
replase(char oldChar,char newChar)
将旧字符串转换成新字符串
String content = " java is good "; System.out.println(content.replace("java","python")); //结果: python is good
split(String str)
根据str做拆分
String content = "java is good"; String[] contentIndex = content.split(" ");//用空格作为拆分条件 System.out.println(contentIndex.length); //结果:3 for (String i: contentIndex) { //遍历contentIndex数组 System.out.println(i); //结果: /* java is good */ }
String content = "java is good,python is nice"; String[] contentIndex1 = content.split("[ ,]");//用空格或者逗号进行拆分 for (String i:contentIndex1) { System.out.println(i); //结果: /* java is good python is nice */ }
String content = "java is good,,python is nice"; String[] contentIndex2 = content.split("[ ,]+");//根据逗号和空格拆分,并且逗号和空格存在多个时 for (String i:contentIndex2) { System.out.println(i); //结果: /* java is good python is nice java */ }
equals()/compareTo()
字符串比较
package commonclass.stringclass; public class Demo04 { public static void main(String[] args) { String s1 = "hello"; String s2 = "HELLO"; //equals()字符串内容比较 System.out.println(s1.equals(s2));//False //equalsIgnoreCase()字符串内容忽略大小写比较 System.out.println(s1.equalsIgnoreCase(s2));//True String s3="abc";//97 String s4="xyz";//120 //compareTo()字符串位置的比较,第一位相同,就比第二位 System.out.println(s3.compareTo(s4));//97-120=-23 String s5="abc";//97 String s6="abcdef";//120 //compareTo()上面两个参数,一个参数值是另一个参数值的开头,这种情况比的就是长度 System.out.println(s5.compareTo(s6));//-3 } }
案例联系
需求: 已知String str = "this is a text"; 1.将str中的单词单独获取出来 2.将str中的text替换为practice 3.在text前面插入一个easy 4.将每个单词的首字母改为大写
package commonclass.stringclass; import java.util.Arrays; public class Demo05 { public static void main(String[] args) { String str = "this is a text"; //1.将str中的单词单独获取出来 String[] strIndex = str.split(" "); for (String i:strIndex) { System.out.println(i); } //2.将str中的text替换为practice System.out.println(str.replace("text","practice")); //3.在text前面插入一个easy System.out.println(str.replace("text","easy text")); //4.将每个单词的首字母改为大写 //方式一 String[] strIndex1 = str.split(" "); for (String i:strIndex1) { char fist = i.charAt(0); char upperfirst = Character.toUpperCase(fist); i = upperfirst + i.substring(1,i.length()); System.out.println(i); } str = Arrays.toString(strIndex1); System.out.println(str); //方式二 /* String[] strIndex2 = str.split(" "); for (int i = 0; i < strIndex2.length; i++) { char first = strIndex2[i].charAt(0); char upeerfirst = Character.toUpperCase(first); strIndex2[i]= upeerfirst + strIndex2[i].substring(1,strIndex2[i].length()); System.out.println(strIndex2[i]); } str = Arrays.toString(strIndex2); System.out.println(str); */ } }
可变字符串
- StringBuffer:可变长字符串,JDK1.0提供,运行效率慢,线程安全
- StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全;单线程推荐使用这个
StringBuffer和StringBuilder常用方法
package commonclass.stringclass; public class Demo06 { public static void main(String[] args) { //StringBuffer和StringBuilder的方法是一样的 //StringBuffer sb = new StringBuffer(); StringBuilder sb = new StringBuilder(); //1. append()追加 sb.append("java"); System.out.println(sb.toString()); sb.append(" is good"); System.out.println(sb.toString()); //2.insert()添加 sb.insert(0,"编程语言:"); System.out.println(sb.toString()); //3.replace()替换 sb.replace(5,9,"python"); System.out.println(sb.toString()); //4.delete()删除 sb.delete(0,5); System.out.println(sb.toString()); //5.清空 sb.delete(0,sb.length()); System.out.println(sb.length()); } }