!StringBuffer和StringBuilder用法一样
!区别是:StringBuffer 线程安全 但是效率低
! StringBuilder 线程不安全 但是效率高
Striing和StringBuffer
String字符串遍历:
public class Demo01 {
public static void main(String[] args) {
//字符串遍历
String s1="木舟0基础学习Java的第十一天";
for(int i=0;i<s1.length();i++){
char c=s1.charAt(i);
System.out.println(c);
}
//查找大小写字符 数字字符 其他字符 一共出现几次
String s2="ABCDEfghizk12345!?@$%^&*";
int big=0;
int small=0;
int num=0;
int other=0;
for(int i=0;i<s2.length();i++){
char c1=s2.charAt(i);
//判断A-Z 65-90
if(c1>=65&&c1<=90){
big++;
//判断 a-z 97-122
}else if(c1>=97&&c1<=122){
small++;
//判断数字0-9 48-57
}else if(c1>=48&&c1<=57){
num++;
}else{other++;}
}
System.out.println("大写字符"+big);
System.out.println("小写字符"+small);
System.out.println("数字字符"+num);
System.out.println("其他字符"+other);
}
}
String转换功能:
public class Demo02 {
public static void main(String[] args){
String s="ABBDAF";
//将字符串转换为字节数组
byte[] b=s.getBytes();
System.out.println(Arrays.toString(b));//[65, 66, 66, 68, 65, 70]
//字符数组
char[] c=s.toCharArray();
System.out.println(Arrays.toString(c));//[A, B, B, D, A, F]
//将字符数组转换为字符串
char[] c1={'我','爱','学','习'};
String s1=String.valueOf(c1);
System.out.println(s1);//我爱学习
//将数字转换为字符串
int a=12345;
//方法1
String s2=String.valueOf(a);
System.out.println(s2);//12345
//方法2
String s3=""+a;//字符串拼接
System.out.println(s3);
//错误方法:String ss=a.toString();报错
//将字符串转换为小写
System.out.println(s.toLowerCase());//abbdaf
//将字符串转换为大写
System.out.println(s.toUpperCase());//ABBDAF
//连接
System.out.println(s.concat("abc").concat("123").concat("!?."));//ABBDAFabc123!?.
}
}
两个案例:
public static void main(String[] args){
//将一个字符串首字母转成大写 其余转成小写
String result="";
String s="ymzNSZBD";
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
String s1=""+c;
if(i==0){
result+=s1.toUpperCase();
}else{
result+=s1.toLowerCase();
}
}
System.out.println(result);//Ymznszbd
}
public static void main(String[] args) {
//将数组转为字符串 得到"[1,2,3]"
int[] arr = {1, 2, 3};
String s="\"[";
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
s+=arr[i];
s+="]\"";
}else{
s+=arr[i];
s+=",";
}
}
System.out.println(s);//"[1,2,3]"
}
String中的其他功能:
public static void main(String[] args) {
//String替换功能
String s1=" 辽宁省,大连市 ";
String s2=s1.replace("大连市","沈阳市");
System.out.println(s2);// 辽宁省,沈阳市
System.out.println(s2.replace('沈','朝'));//单字用单引号或者双引号都可以
//去除头尾空格
System.out.println(s1.trim());//辽宁省,大连市
//比较首字母在字典中相差的数
String s3="abc";
String s4="Dcb";
System.out.println(s3.compareTo(s4));//29
System.out.println(s4.compareTo(s3));//-29
//忽略大小写 然后 比较大小
System.out.println(s3.compareToIgnoreCase(s4));//-3
}
案例:
public static void main(String[] args) {
//字符串反转 通过键盘录入
/* Scanner sc=new Scanner(System.in);
System.out.println("请输入您想反转的字符串:");
String s=sc.next();
reverse(s);*/
System.out.println("请输入您想反转的字符串:");
String s=new Scanner(System.in).next();//匿名对象
reverse(s);
}
public static void reverse(String s){
for(int i=s.length()-1;i>=0;i--){
System.out.print(s.charAt(i)+"");
}
}
}
public static void main(String[] args) {
//定义一个字符串 查找字符串中出现liaoning的次数
String s="sadsaliaoninghgkghiuwliaoningashdbaliaoningda";
String ss="liaoning";
int add=0;
while(s.indexOf(ss)!=-1){//判断想查找的字符串第一次出现处的索引 查找不到返回-1
int a=s.indexOf(ss);//将索引赋值给 int a
s=s.substring(a+ss.length());//截取索引值加ss长度的字符串 然后将截取后的字符串赋值给s
add++;
}
System.out.println(add);
}
public static void main(String[] args) {
String s="sadsa,liaoning,hgkghiuwli,aoningash,dbaliaoni,ngda";
//将所有","替换成" "空格
String s2=s.replace(","," ");
System.out.println(s2);
//以空格为分割点 将它们分割
String[] ss=s2.split(" ");
for (int i=0;i<ss.length;i++) {
System.out.println(ss[i]);
}//sadsa
//liaoning
//hgkghiuwli
//aoningash
//dbaliaoni
//ngda
}
StringBuffer:线程安全的可变字符序列 构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
//获取容量
int i=sb.capacity();
System.out.println(i);//初始容量为16
//获取实际里面装了多少元素
int a=sb.length();
System.out.println(a);//0 实际里面装了0个元素
//在sb中添加了一个元素 相当于+
StringBuffer sb1=sb.append("你好");
System.out.println(sb1);//你好 底层重写了Object的toString()方法
System.out.println(sb.append("123456789abcdefg"));//你好123456789abcdefg
System.out.println(sb.length());//18 实际里面装了18个元素
//34 当装入的容量超过初始容量 新的容量会翻倍 底层会重新创建一个 byte[34]数组
System.out.println(sb.capacity());
StringBuffer sb2=new StringBuffer(20);
int i1=sb2.capacity();
System.out.println(i1);//容量为20 如果设定了容量就是设定的容量 不然就是初始容量16
StringBuffer sb3=new StringBuffer("abcde");
int i2=sb3.capacity();
System.out.println(i2);//容量为21 是在初始容量16的上面加5
}
StringBuffer插入和删除
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("abcd");
//插入 insert 将z插入到索引为2的位置
System.out.println(sb.insert(2,"z"));//abzcd
//删除 deleteCharAt 将索引指定位置的元素删除
System.out.println(sb.deleteCharAt(2));//abcd
//删除 delete 将0-3索引元素删除(含头不含尾)
System.out.println(sb.delete(0,3));//d
}
StringBuffer替换和反转
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("大连是一个宜居的城市");
//替换replace 将0-2索引元素替换(含头不含尾)
System.out.println( sb.replace(0,2,"沈阳"));//沈阳是一个宜居的城市
//反转reverse
System.out.println(sb.reverse());//市城的居宜个一是阳沈
}
StringBuffer截取
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("沈阳是一个宜居的城市");
//截取 substring 从索引2开始截取到末尾
String s=sb.substring(2);
System.out.println(s);//是一个宜居的城市
//从索引2截取到索引6
String s1=sb.substring(2,6);//含头不含尾
System.out.println(s1);//是一个宜
}
StringBuffer和String互相转换
public static void main(String[] args) {
//String 转换 StringBuffer
//构造方法 构造方法 toString()
//subString(0,length)
StringBuffer sb=new StringBuffer("努力学习");
String s1=sb.toString();
System.out.println(s1);
String s2=sb.substring(0);
System.out.println(s2);
//StringBuffer 转换 String
//StringBuffer(String s)
//append()
String s="我爱学习";
StringBuffer sb1=new StringBuffer(s);
System.out.println(sb1);
StringBuffer sb2=new StringBuffer();
StringBuffer sb3=sb2.append(s);
System.out.println(sb3);
}