/**
* StringBuffer和StringBuilder的区别
*
* stringBuffer:同步的,多线程访问安全,Sybchronized
* stringBuilderr;非同步的,单线程访问的效率高
*/
/**
* String 是不可更改的
* 1.字符串都是对象
* 2.一旦初始化就不可以被更改,因为是常量
* 3.通过String类的构造方法就知道,将字符串数组或者字符转化为字符串
*
* StringBuffer 线程安全 同步
* 是一个长度可变的
* 容器 缓冲区
* 可以操作多个数据类型的
* 最终通过toSTring方法返回字符串类型
*
* StringBuilder非安全的
* 挺高效率
* 简化书写
* 建议使用
* StringBuffer
package String;
public class StringDemo {
public static void main(String[] args) {
String str ="abc";
str ="haha";
System.out.println(str);
System.out.println("===========");
String s1 ="tanzhou";
String s2 ="tanzhou";
System.out.println(s1==s2);//true
System.out.println("-----------");
String s3 = "abc";
String s4 = new String("abc");
System.out.println("s3="+s3);
System.out.println("s4="+s4);
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
//String重写的equals方法,建立字符串自己的判断相同一句
//字符串对象的内容来判断
//s3和s4有Sam不同
/**
* s3创建在内存中有一个对象,这个对象在常量池中
* s4创建在内存种有两个对象,首先通过new在堆中 常量池
*/
}
}
===========================================
package String;
public class StringDemo2 {
/**
* "abcde"
* 1.字符串是一个对象,那么他的方法 必然是围绕操作这个对象的数据而定义的
* 2.你们认为字符串中有哪些功能
* 1.有多少行字符
*
* int Length();
* 2.字符串的位置
* int indexOf(int ch)
* 3.获取所需位置的字符串
* char charAt(int)
* 4.获取部分字符串
* String substring(int start,int end)包含头不包含尾
* 5.字符串中是否包含另一个字符串
* boolean contains(String)
* indexOf
* 6.将指定字符串替换成另一个字符串
* String replace(oldString,newString)
* 7.将字符串转换成一个字符串数组,或者字节数组
* char[] chs = str.toCharArray();
* byte[] bytes = str.getButes();
*
* 8.将字符串转成大写的字母字符串
* String upperString
* 9.将字符串按照指定方式分解成很多字符串"xiaoming,xiaoming,xiaoming";
* String [] split
*/
public static void main(String[] args) {
String str ="abcdefga";
System.out.println("lenth="+str.length());
int len = str.length();
int index =str.indexOf('a');//返回指定字符串在此字符中的索引
System.out.println(index);
int index1= str.indexOf('a',index+1);
System.out.println(index1);
int index2= str.indexOf('a',index1+1);
System.out.println(index2);
int index3 = str.lastIndexOf('a');
System.out.println(index3);
str = "tanzhou";
char ch =str.charAt(4);//不存在就会弹出下标越界异常IndexoutofBoundsException
System.out.println(ch);
String s = str.substring(1,5);
System.out.println(s);
boolean b = str.contains("xxs");//参数是多态(包含关系)
System.out.println(b);
String str1= str.replace("zhou", "xxs");//替换
System.out.println(str1);
//将字符串转成数组
char[] chs = str.toCharArray();
//将字符串转成字节数组
byte[] bytes = str.getBytes();
String upperString =str.toUpperCase();//转大写
String lowerString =str.toLowerCase();//转大写
System.out.println(upperString);
System.out.println(lowerString);
//循环遍历字符串数组
str = "xiaoming,xioao,xjjj";
String[] names = str.split(",");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
int result ="ab".compareTo("ab");
/**
* 只要想让对象具备比较大小的功能,只要实现Compareble接口
*/
System.out.println(result);
}
}
================================================
package StringBuffer;
public class StringBufferDemo {
/**
* 字符串缓冲区
* 长度是可以变化的 任意类型
* 容器对象提供了很多容器数据的操作功能 (方法)的增删改查
*必须所有的数据最终变成字符串
*/
public static void main(String[] args) {
//1.创建有个字符串缓冲区对象,用于存储数据
StringBuffer sb = new StringBuffer();
//2.添加数据appent-->追加,不断添加数据后,要对换冲去的最后数据进行操作,必须转出呢个字符串才可以操作
String string = sb.append("coco").toString();
sb.append(true);
sb.insert(2, "hah");//cohahcotrue
sb.delete(1,4);//chcotrue
sb.replace(2, 4, "xxs");//也是一个区间的替换(2-4]
System.out.println(sb);
String s = "a"+5+'c';
s=new StringBuffer().append("a").append("c").toString();
}
}
============================================
package StringBuffer;
public class StringBufferTest {
public static void main(String[] args) {
//int[]arr={34,12,89,68} ----[34,12,89,68]
int[]arr={34,12,89,68};
String str = toString(arr);
toString2(arr);
}
public static String toString2(int[] arr) {
/*
应用:无论多少数据什么类型不重要,只要最终变成字符串 就可以使用StringBuffer这个容器
*/
//1.创建缓冲区
StringBuffer sb = new StringBuffer();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1){
sb.append(arr[i]+",");
}else{
sb.append(arr[i]+"]");
}
}
return sb.toString();
}
public static String toString(int[] arr) {
String str = "[";
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1){
str +=arr[i]+",";
}else{
str +=arr[i]+"]";
}
}
return str;
}
}