String StringBuffer StringBuilder
程序员文章站
2024-01-20 22:05:46
...
package day14;
/*
* 字符串类:java将与字符串相关的功能面向对象了,形成的类就是字符串类,表示方法""
* 分类:
* 1不可变字符串--String:字符串本身不能发生改变,与引用无关。如果改变会创建一个新的String字符创
* 2可变字符串--StringBuffer/StringBuider:字符串本身可以发生改变
*
* 首先讲解不可变字符串
* 字符串存储的位置:在常量区,在堆当中的一块特殊的区域
* 字符串常量的特点:同一个内容的字符串常量在内存中只允许存储一份,目的:节省内存
*
*/
public class Demo5 {
public static void main(String[] args) {
// //不可变字符串,指:字符串
// String s1="hello";
// //可变字符串,指:字符串的长度可变。内存使用灵活度更高
// StringBuffer s2=new StringBuffer("world");
// System.out.println(s1+" "+s2);
//// 首先讲解不可变字符串
String s1="1000phone";
//"1000phone"被系统看做是对象处理,但是它又不是对象,所以把它放在堆中的一块特殊区域里
//这块区域只处理字符串
String s2="1000phone";
String s3=new String("1000phone");
String s4=new String("1000phone");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//false
System.out.println(s1==s4);//false
System.out.println(s3==s4);//false
//说明字符串重写了equals方法,重新制定了比较规则,规则编程:如果直接是字符串,就比较地址
//如果有内容就比较内容中的地址
System.out.println(s1.equals(s2));//true
}
}
package day14;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Demo6 {
public static void main(String[] args) throws UnsupportedEncodingException {
//1.判断:
//判断是否包含一个子字符串
//boolean contains(String s)
String a1="abcde";
System.out.println(a1.contains("abc"));//true
//判断两个字符串的内容是否相同
//boolean equals(Object anObject)
String a2="abcde";
System.out.println(a1.equals(a2));//true
//忽略大小写判断两个字符串的内容是否相同
//boolean equalsIgnoreCase(String anotherString)
String a3="ABcdE";
System.out.println(a1.equalsIgnoreCase(a3));//true
//判断是否以某字符串开头
//boolean startsWith(String prefix)
System.out.println(a1.startsWith("ab"));
//判断是否以某字符串结尾
//boolean endsWith(String suffix)
System.out.println(a1.endsWith("bcde"));
//2.转换:字符数组和字符串的转换
//1:使用构造方法
//String(char[] value)
char[] c1=new char[] {'h','e','l','l','o'};
String s1=new String(c1);
System.out.println(s1);//hello
//String(char[] value,开始位置,取多少个)
String s2=new String(c1,1,2);
System.out.println(s2);//el
//将字符串转成字符数组
//char[] toCharArray()
String s3= "123456";
char[] c2=s3.toCharArray();
System.out.println(c2);//123456为什么不是打印c2这个数组的地址???
//使用静态方法
//static String copyValueOf(char[] data)
//static String copyValueOf(char[] data, int offset, int count)
//2将字节数组转成字符串
//String(byte[] bytes)
byte[] b1=new byte[] {97,98,99};
String s4=new String(b1);//将每一个byte转化为一个char
System.out.println(s4);//abc
//String(byte[] bytes, 开始位置,长度)
String s5=new String(b1,0,2);
System.out.println(s5);//a,b
//String(byte[] bytes, String charsetName)//使用指定的编码将字节数组转换成字符成
//GBK一个汉字两个字节
//utf-8一个汉字三个字节
byte[] b2="你好".getBytes();//编码
System.out.println(Arrays.toString(b2));
String s6=new String(b2,"gbk");//解码: new String(s)会用该类的编码方式进行解码
System.out.println(s6);
//将字符串转成字节数组
//byte[] getBytes()
//将基本数据类型转换成字符串
//String.valueOf()
String s7=String.valueOf(23);
System.out.println(s7);
//3.替换:
//String replace(String 老的子串, String 新的子串)
String str1="abc1234abc";
System.out.println(str1.replace("a","AA"));
//子串:
//String substring(int beginIndex) //区间左闭右开
//String substring(int beginIndex, int endIndex) //包含起始位置,不包含结束位置,到结束位置的前一位
//转换,去除空格,比较:
//大小写转换
//String toLowerCase()
//String toUpperCase()
//将字符串两端的空格去掉
//注:只能去掉两边的空格
//String trim()
String str2=" hello world ";
System.out.println(str2.trim()+"skrr");
//按字典顺序比较两个字符串
//两个字符串从第一个开始比较,如果相等比较下一个,如果不相等,返回当前字符的ascii码的差值(s1的-s2的),结束比较
//int compareTo(String anotherString)s1.compareTo(s1) s1>s2返回正数 s1==s2返回0 s1<s2返回负数
String a="123";
String b="123";
System.out.println(a.compareTo(b));//0
//4.切割: String[] split(String刀)
//注意:作为刀的部分不会出现在内容里
String str3="a b c d e ";
String[] str4=str3.split(" ");
for(String i:str4)
System.out.println(i+"skr");
String str5="a,b,c,d,";
String[] str6=str5.split("");
for(String j:str6)
System.out.println(j);
}
}
package day14;
public class Demo7 {
//String,StringBuffer,StringBuilder的直接父类都是Object
//他们三者之间没有继承关系
//只是写了同名的方法
/*
* 可变字符串和不可变字符串的区别:内存长度是否可变
* 可变字符串(也成为字符串的缓冲区):有StringBuffer和StringBuilder
* 区别:1出现的时间不一样StringBuffer(jdk1.0),StringBuilder(jdk1.5)
* 2StringBuffer是线程安全的,StringBuilder是线程不安全 的
*
* 出现的问题:StringBuffer中的每个方法都有处理线程安全的代码,这会影响
* 程序的效率。所以在单线程(不用考虑线程安全问题)时使用StringBuilder,在考虑线程安全时使用StringBuffer)
*
* 注:StringBuffer和StringBuilder的方法名字完全相同
*
* 为什么进行jdk版本的更新?
* 1需要新增功能
* 2需要进行代码的优化
* 3需要更新现有的功能
* 4增加用户体验
*
* String类是被final修饰的
* 当一个类被final修饰了:1不能被继承2不能重写
*
*/
public static void main(String[] args) {
//创建StringBuffer对象
//创建了一个空的可变字符串对象
StringBuffer sf1=new StringBuffer();
//StringBuffer stringbuffer="hello";报错,注意:"hello"默认为String类型的
StringBuffer sf2=new StringBuffer("hello");
//StringBuffer:
//1.存储:
//StringBuffer append(boolean b) 从最后插入
sf1.append("hello ");
sf1.append("world");
System.out.println(sf1);
//StringBuffer insert(int 指定字符索引, 任何类型的数据) 从指定位置插入
//2.删除:
//StringBuffer delete(int start, int end) 左闭右开,删除一个区间内的字符串
sf1.delete(3,5);
System.out.println(sf1);
//StringBuffer deleteCharAt(int index) 删除一个字符
sf1.deleteCharAt(0);
System.out.println(sf1);
//3.修改:
//StringBuffer replace(int start, int end, String str) 把[start,end)范围内的字符串替换成指定的子字符串
sf1.replace(0, 1, "hahaha");
System.out.println(sf1);
//void setCharAt(int index, char ch) 修改一个字符
//4.获取:
//char charAt(int index)获取指定索引出的字符
char c1=sf1.charAt(0);
System.out.println(c1);
//int indexOf(String str)//从左往右查
System.out.println(sf1.indexOf("l"));
//int indexOf(String str, int fromIndex)//从指定所引出开始从左往右查
System.out.println(sf1.indexOf("l",7));
//int lastIndexOf(String str) //从右往左查
System.out.println(sf1.lastIndexOf("l"));
//返回指定子字符串(从右边开始计数)在此字符串第一次出现时的索引
//int lastIndexOf(String str, int fromIndex)//从该所引出从右往左查找字符串
System.out.println(sf1.lastIndexOf("l",7));
//返回指定子字符串(从右边开始计数,范围:当前指定的位置-0)在此字符串第一次出现时的索引
//int length()
//返回长度(字符数)。
//5.反转:
//StringBuffer reverse()
}
}
推荐阅读
-
String,StringBuffer,StringBuilder
-
String StringBuffer StringBuilder
-
Java中API下的String,StringBuffer,StringBuilder的区别及用法
-
mybatis异常invalid comparison: java.util.Date and java.lang.String
-
String到底是值传递还是引用传递?
-
php Parse error: syntax error, unexpected T_STRING,该怎么处理
-
String,StringBuilder,StringBuffer
-
PHP中addslashes与mysql_escape_string的区别分析,mysqlescapestring_PHP教程
-
Node.js API详解之 string_decoder用法实例分析
-
PHP函数addslashes和mysql_real_escape_string的区别_PHP教程