目录
四、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"));//4
System.out.println(str.indexOf("q", 3));//9
System.out.println(str.lastIndexOf("q"));//9
System.out.println(str.lastIndexOf("q", 5));//0
//判断字符串是否以指定位置开头
System.out.println(str.startsWith("qw"));//ture
System.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);//wwesdfsdfwwe
String str02=str.replaceAll("q","z");
System.out.println(str02);//zwesdfsdfzwe
String 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未采用同步处理,线程不安全。