目录
一、String的基本用法
二、对于字符串常量池的理解。
三、String类的常见操作。
四、StringBuffer和StringBuilder的使用。
一、String的基本用法
1.1String的创建方法
//第一种创建方法
String str="Hellow";
System.out.println(str);//第二种创建方法
String str02=new String("Hellow");
System.out.println(str02);//第三种创建方法
char[] chars={'q','w','e','c'};
String str03=new String(chars);
System.out.println(str03);
注意:String是引用类型,指向堆中的地址。
String str="Hellow";
String str02=str;
str="hellow";
System.out.println(str);
System.out.println(str02);
此时可以看出str的改变不会让str02改变。
1.2字符串中间的比较。
正常情况下:
String str="Hellow";
String str02="Hellow";
System.out.println(str==str02);//true
String str="Hellow";
String str02="Hellow";
System.out.println(str.equals(str02));//true
String str="Hellow";
String str02="hellow";
System.out.println(str==str02);//false
String str="Hellow";
String str02="hellow";
System.out.println(str.equals(str02));//false
注意:
String str="Hellow";
String str02=new String("Hellow");
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//false
我们会发现str==str02为false,这是为什么呢?
接下来我们就会引用字符串常量池的概念。
二、对于字符串常量池的理解。
2.1什么是字符串常量池
就拿String str="Hellow"来说
而 String str02=new String("Hellow")是以这种方式存储
我们找到==比较的是String引用的地址,new一个对象时,会在堆中创建一个对象使它指向字符串常量池中的对象。
String类型定义的字符串都在字符串常量池。
2.2intern的用法
String str="Hellow";
String str02=new String("Hellow");
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//false
想要使他们相等我们就要使用intern方法进行入池操作
String str="Hellow";
String str02=new String("Hellow").intern();
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//true
2.3字符串的不可变性
String str = "hello" ;
str = str + " world" ;
str += "!!!" ;
System.out.println(str);
// 执行结果
hello world!!!
这个代码看似是在str上进行操作,其实是创建了很多个对象,最后引用最后的对象,字符串在正常情况下不能被改变。
三、String类的常见操作。
3.1字符与字符串之间的转换
3.1.1字符------->字符串
public static void main(String[] args) {char[] chars={'a','b','c','d','e'};//直接转换String str=new String(chars);//从第1个到第3个String str01=new String(chars,1,3);System.out.println(str);System.out.println(str01);}
3.1.2字符串------->字符
public static void main(String[] args) {String str="abcdefg";//1、对于单个类容的截取char ch=str.charAt(1);System.out.println(ch);//2、转换成char[]类型的数组char[] chars=str.toCharArray();for (char c:chars) {System.out.println(c);}}
3.2字节与字符串的转换
3.2.1字节------->字符串
public static void main(String[] args) {byte[] bytes={'1','2','3'};//1、直接转换String str=new String(bytes);System.out.println(str);//2、部分转换String str2=new String(bytes,1,2);System.out.println(str2);}
3.2.2字符串------->字符
public static void main(String[] args) throws UnsupportedEncodingException {String str="小杨";//1.直接转换byte[] bytes=str.getBytes();for (byte b:bytes) {System.out.println(b);}//2、转码转换处理byte[] bytes1=str.getBytes("utf-8");//可以转换成别的字符串for(byte e:bytes1){System.out.println(e);}}
对于这种异常我们直接抛出就行了。
注意:char[] 更适合对于文本的处理(文本数据)
byte[] 更适合网络传输(二进制编码)
3.3对于字符串的比较
public static void main(String[] args) {String str="Hellow";String str02="Hellow";//区分大小写比较System.out.println(str.equals(str02));//不分大小写比较System.out.println(str.equalsIgnoreCase(str02));//相等返回0,小于返回负数,大于返回正数System.out.println(str.compareTo(str02));}
3.4对于字符串的查找
public static void main(String[] args) {String str="qwemnbxvcqwe";//判断一个子字符串存在System.out.println(str.contains("qwe"));//ture//查找操作System.out.println(str.indexOf("nb"));//4System.out.println(str.indexOf("q", 3));//9System.out.println(str.lastIndexOf("q"));//9System.out.println(str.lastIndexOf("q", 5));//0//判断字符串是否以指定位置开头System.out.println(str.startsWith("qw"));//tureSystem.out.println(str.startsWith("w", 1));//ture//判断是否以指定位置结尾System.out.println(str.endsWith("qwe"));//ture}
3.5对于字符串的替换
public static void main(String[] args) {String str="qwesdfsdfqwe";//对于字符串的替换String str01=str.replace('q','w');System.out.println(str01);//wwesdfsdfwweString str02=str.replaceAll("q","z");System.out.println(str02);//zwesdfsdfzweString str03=str.replaceFirst("q","z");System.out.println(str03);//zwesdfsdfqwe}
注意: 对于字符串的替换是创建一个新的字符串,不是更改原来的字符串
3.6对于字符串的拆分
public static void main(String[] args) {String str="hello world hello bit";String[] strings=str.split(" ");for (String s:strings) {System.out.println(s);}String str01="hello world hello bit";String[] strings01=str01.split(" ",2);for (String s:strings01) {System.out.println(s);}}
注意: 有些分隔要加上“\”才能使用
3.7对于字符串的截取
public static void main(String[] args) {String str="helloworld";System.out.println(str.substring(2));//从0开始不包含4下标System.out.println(str.substring(0, 4));}
四、StringBuffer和StringBuilder的使用。
public static void main(String[] args) {StringBuffer sb=new StringBuffer();sb.append("qwe").append("wwedq");System.out.println(sb);}
StringBuffer和String的区别是StringBuffer可以在原有的基础上进行修改。
我们可以在原有的字符串上进行其他的修改
例如:
public static void main(String[] args) {StringBuffer sb=new StringBuffer();//添加sb.append("qwe").append("wwedq");System.out.println(sb);//qwewwedq//反转System.out.println(sb.reverse());//qdewwewq//删除System.out.println(sb.delete(1, 3));//qwwewq}
注意:解释String、StringBuffer、StringBuilder的区别
1、String中的内容不可修改、而StringBuffer和StringBuilder中的内容可以修改。
2、StringBuffer和StringBuilder中的内容大致相似。
3、StringBuffer采用同步处理,线程安全操作;而StringBuilder未采用同步处理,线程不安全。