StringBuffer

本文详细介绍了Java中String类的遍历、拼接、反转和对称性判断方法,并提供了使用StringBuffer进行字符串操作的示例,包括添加、删除、截取和替换功能。此外,还讨论了StringBuffer与String的区别,强调了线程安全和效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.String类的(遍历,拼接,字符串反转,判断字符串是否对称)

1.String类的遍历 :将字符串的每一个字符分别输出

使用String类的转换功能 :String---->字符数组toCharArray()--->char[]

public class StringTest {
    public static void main(String[] args) {
 
        //创建一个字符串
        String str = "helloJavaEE" ;
 
       //字符数组
        char[] chs = str.toCharArray();
        for(int x = 0 ; x < chs.length ; x ++){
            char ch = chs[x] ;
            System.out.println(ch);
        }
 
    }
}
2.已知一个数组,静态初始化,将数组拼接成String (使用功能改进)

定义一个将数组转换成String的功能,返回值就是String [元素1, 元素2, 元素2 ...]

拼接:  +:拼接符号

          concat():拼接功能

public class StringTest2 {
    public static void main(String[] args) {
        //创建数组,静态初始化
        int[] arr = {11,22,33,44,55} ;
 
        String str = arrayString(arr);
        System.out.println(str);
        //+ ---->使用Stringconcat功能完成
    }
 
    /**
     * 定义一个将数组转换成String类型的功能
     * 两个明确
     *  1)明确返回值类型:String
     *  2)明确参数类型以及参数个数
     *              一个参数,int类型的数组
     */
    public static String arrayString(int[] arr){
        //定义一个空字符串
        String result = "" ;
 
        //拼接左中括号
        result +="[" ;
        //遍历arr数组,获取每一个元素
        for(int x = 0 ; x < arr.length ; x ++){
            //判断是否是最大角标
            if(x == arr.length-1){
                result += arr[x] ;
                result +="]" ;
            }else{
                //拼接逗号和空格
                result += arr[x] ;
                result += ", ";
            }
        }
        return result ;
    }
}
3.键盘录入字符串,将字符串进行反转(使用功能改进) String转换功能

  方式二:StringBuffer里面有转换功能

public class StringTest3 {
    public static void main(String[] args) {
 
        //创建键盘录入对象
        Scanner sc  = new Scanner(System.in) ;
 
        //提示并录入数据
        System.out.println("请您输入一个字符串:");
        String line = sc.nextLine() ;
 
        //调用功能
       String result =  reverse(line) ;
        System.out.println(result);
    }
    public static String reverse(String s) {
 
        //定义一个结果变量
        String result = "" ;
        //将字符串转换成char[]
        char[] chs = s.toCharArray(); //转换功能
        for(int x = chs.length-1 ; x>=0 ; x --){
            result += chs[x] ;
        }
        return  result ;
    }
}
4.(1)键盘录入一个字符串:判断字符串是否为对称字符串:   

  方式2: StringBuffer完成

分析:
(1)定义一个功能完成   compare(String str)---返回值 boolean
(2) 获取字符串长度 str.length()
(3) 创建一个字符数组:动态初始化 char[] charArray = new char[str.length()] ;
(4)遍历字符串--->通过获取功能:  str.charAt(角标);获取到每一字符赋值字符数组的每一个元素
(5)遍历charArray数组,保证数组长度/2
   charArray[i] != charArray[charArray.length-1-i]
   就不对称
   否则就对称
 
public class StringTest4 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;
 
        //提示并录入数据
        System.out.println("请您输入一个字符串:");
        String line = sc.nextLine() ;
        
        //调用功能
        boolean flag = compare(line) ;
        System.out.println(flag);
    }
 
 
    //比较的功能
    private static boolean compare(String line) {
 
 
        //创建一个新的字符数组,动态初始化
        char[] charArray = new char[line.length()] ;
 
        //遍历line字符串,通过charAt(int index)获取每一个字符
        for(int x = 0 ; x < line.length() ; x ++){
           charArray[x] = line.charAt(x) ;//将字符赋值字符数组中的每一个元素
        }
 
        //遍历字符数组charArray,保证长度/2
        for(int i = 0 ; i < charArray.length/2 ; i ++){
            if(charArray[i] !=charArray[charArray.length-1-i]) {
                return false;
            }
        }
        return true ;
    }
}
 (2)方式二:StringBuffer

public class StringTest4 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;
 
        //提示并录入数据
        System.out.println("请您输入一个字符串:");
        String line = sc.nextLine() ;
        boolean flag2 = compare2(line) ;
        System.out.println(flag2);
    }
 
    private static boolean compare2(String line) {
       /* //将line--->StringBuffer
        StringBuffer sb = new StringBuffer(line) ;
        String str = sb.reverse().toString();
        return str.equals(line) ;*/
 
       return new StringBuffer(line).reverse().toString().equals(line) ;
    }
 
}
   
二.StringBuffer

1.添加功能:

append(任何类型) :将内容追加到字符串缓冲区中 (在字符串缓冲区的最后一个字符序列的末尾追加) 返回值是字符串缓冲区本身.

public StringBuffer insert(int offset,String str):插入:在指定位置处插入指定的内容

public class StringBufferDemo {
    public static void main(String[] args) {
        //创建一个字符串缓冲区对象
        StringBuffer sb = new StringBuffer() ;
        //StringBuffer  append(任何类型)
       sb.append("hello").append("world").append(100).append('a').append(12.34) ;
        System.out.println("sb:"+sb);
 
 
        System.out.println("----------------------------------");
 
 
        //public StringBuffer insert(int offset,String str)
        //插入
        sb.insert(5,"高圆圆") ;
        System.out.println("sb:"+sb);
    }
}


2.删除功能

public StringBuffer deleteCharAt(int index):删除指定索引处的缓冲区的字符序列,返回字符串缓冲区本身

public StringBuffer delete(int start,int end):删除从指定位置到指定位置结束的字符序列(包含end-1处的字符),返回字符串缓冲区本身 --------->

[start,end-1]

public class StringBufferDemo2 {
    public static void main(String[] args) {
 
        //创建一个StringBuffer对象 (默认初始容量16)
        StringBuffer buffer = new StringBuffer() ;
        buffer.append("hello").append("world").append("Javaee") ;
        System.out.println(buffer);
 
        System.out.println("---------------------------");
 
        System.out.println("delete():"+buffer.delete(5,10));//5-9
 
    }
}


3.类型的相互转换(重点)

开发中:

(1)本身A类型,由于需要使用B类型的功能,所以 A类型---->B类型

(2)A类型,需要使用B类型的功能,A--->B类型,使用完功能之后,又可能结果又需要A类型,

     B类型---->A类型

String---->StringBuffer

StringBuffer---->String

4.StringBuffer的特有功能-->public StringBuffer reverse(),反转之后,返回的是字符串缓冲区本身

键盘录入一个字符串,将字符串进行反转

public class StringBufferDemo4 {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in) ;
 
        System.out.println("请您输入一个字符串:");
        String line = sc.nextLine() 
        StringBuffer sb = new StringBuffer(line) ;
        String result = sb.reverse().toString();
        System.out.println(result);
 
    }
 
 
}
使用功能改进

public class StringBufferDemo4 {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in) ;
        System.out.println("请您输入一个字符串:");
        String line = sc.nextLine() ;
 
        //调用功能
        String result2 = reverse(line);
        System.out.println(result2);
 
    }
 
    /**
     * reverse反转功能
     * @param s   将指定的字符串反转
     * @return  返回结果字符串
     */
    public static String reverse(String s){
 
      
        //方式1:s---->StringBuffer类型---->有参构造
        StringBuffer buffer = new StringBuffer(s) ;
        return buffer.reverse().toString() ;
 
        //方式2:append()+空参构造方法
        /*StringBuffer buffer = new StringBuffer() ;
        String result = buffer.append(s).reverse().toString();
        return result ;*/
        
        //方式三:匿名对象
        //return new StringBuffer().append(s).reverse().toString() ;
 
    }
 
 
}
 5.StringBuffer的截取功能

(1)public String substring(int start):从指定位置开始,默认截取到末尾,返回值是新的字符串

(2)public String substring(int start,int end):从指定位置开始到指定end-1结束进行截取,返回的新的字符串

public class StringBufferDemo5 {
    public static void main(String[] args) {
 
        StringBuffer sb = new StringBuffer() ;
        sb.append("hello").append("world").append("javaee").append("anroid") ;
        System.out.println("sb:"+sb);
        System.out.println(sb.substring(5));//subString(xx)---->截取的新的字符串
        System.out.println("sb:"+sb);
        System.out.println(sb.substring(5,10));//end-1位置
StringBuffer的替换功能

 public StringBuffer replace(int start, 起始索引

                                             int end, 结束索引(end-1)

                                              String str) 替换的内容

public class StringBufferDemo5 {
    public static void main(String[] args) {
 
        StringBuffer sb = new StringBuffer() ;
        sb.append("hello").append("world").append("javaee").append("anroid") ;
        System.out.println("sb:"+sb);
        System.out.println(sb.replace(5,10,"高圆圆"));
    }
}


 面试题:

StringBuffer,StringBuilder和String的区别?

 答:

(1)String:字符串是一个常量,一旦被赋值,其值不能更改/作为形式参数属于特殊的引用类型,形式参数的改变不会实际参数

(2) StringBuffer:可变的字符序列,线程安全的类----同步的----->执行效率低(线程角度)

(3)StringBuilder:可变的字符序列.和StringBuffer具有相互兼容的api,单线程程序中(只考虑执行效率,不考虑安全问题)

public class StringBufferTest {
    public static void main(String[] args) {
 
        String s = "hello" ;
        System.out.println("s:"+s);
        change(s) ;
        System.out.println("s:"+s);
        System.out.println("-------------------------");
        StringBuffer sb = new StringBuffer("android") ;
        System.out.println("sb:"+sb);
        change(sb) ;
        System.out.println("sb:"+sb);//androidjavaee
    }
    public static void change(StringBuffer sb){//StringBuffer作为形参
        sb.append("javaee") ;//缓存区中追加了javaee
        System.out.println("sb:"+sb);
    }
    public static void change(String s) {//String作为形参:和基本数据类型一致(String是一个常量)
        s = s +"worldjavaee" ;
        System.out.println("s:"+s);
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值