String与StringBuilder

1.String类
String类代表什么?
代表字符串类型的对象

String类在哪个包下?
java.lang包,使用不需导包

String类的特点有哪些?
字符串不可改变、它的值在创建后不可更改
虽然值不可改变、但是值可以被共享使用
字符串效果上相当于字符数组,但底层原理是字节数组

Sting类常用构造方法
String() 创建一个空的字符串对象
String(char[] arr) 根据字符数组创建字符串对象
String(byte[] arr) 根据字节数组创建字符串对象

最方便的定义字符串格式
String 变量名 = “字符串内容”;

通过String类构造方法创建字符串对象的特点
构造方法每创建一次对象,都会在堆内存中开辟不同的对象空间。
所以,每new一次,都是不同的对象。

直接定义字符串变量的方式特点
直接定义的字符串内容会存储到堆内存中的常量池里。
字符串内容如果相同,则直接共享使用。

案例1
用户登录案例
要求在已知账号密码的情况下,输入账号密码三次并提示相关的内容。

import java.util.Scanner;
public class StringTest1{
    public static void main(String[] args){

        String name="itheima";
        String psw="czbk";

        for (int i = 1; i <=3; i++) {


            Scanner scan = new Scanner(System.in);
            System.out.println("请输入账号:");
            String username = scan.nextLine();


            System.out.println("请输入密码:");
            String password = scan.nextLine();
            //使用equals方法判断两个字符串是否一样
            if (username.equals(name)&&password.equals(psw)){

                System.out.println("登录成功!!!");
                break;
            }
            if(username.equals(name)==true&&password.equals(psw)==false){
                System.out.println("你的密码输入错误,你还有"+(3-i)+"次机会");
            }else if(i-3==0){
                System.out.println("登录失败!!!");
            }else if(username.equals(name)==false&&password.equals(psw)==false){
                System.out.println("你的账号密码均输入错误,你还有"+(3-i)+"次机会");
            }else{
                System.out.println("你的账号输入错误,你还有"+(3-i)+"次机会");
            }
        }
    }
}

运行结果
在这里插入图片描述
2.Stringbuilder
String字符串在拼接时有什么特点?
每拼接一个字符串,都会产生新的字符串对象。
这种操作会比较浪费内存空间!

StringBuilder类有什么特点?
StringBuilder是一个字符串缓冲区。
它可以在原有的空间上继续拼接字符串内容!

StringBuilder常用的构造方法有哪些?
StringBuilder() 创建一个内容为空的字符串缓冲区对象
StringBuilder(String s) 根据指定字符串创建字符串缓冲区对象

StringBuilder的添加方法是什么?
StringBuilder append(Object obj) 向缓冲区添加内容

StringBuilder的反转方法是什么?
StringBuilder reverse() 将缓冲区内容进行反转

什么是链式编程?
当一个方法调用后、返回的还是该对象本身,就可以连续调用该方法。

3.StringBuilder和String之间的相互转换
StringBuilder如何转换为String
调用toString()方法即可返回一个字符串

String如何转换为StringBuilder
通过StringBuilder的有参构造方法将字符串添加即可。

案例2
字符串拼接与反转

在这里插入代码`import java.util.Scanner;

public class PinJie {
    //数组变字符串并在控制台输出
   public static String pinJie(int[] arr){
       String s="";
       s+="[";
       for (int i = 0; i <arr.length ; i++) {
           if(i==arr.length-1){
               s+=arr[i];
           }else{
               s+=arr[i];
               s+=",";
           }
       }
       s+="]";
       return s;
   }
    //数组变字符串并反转输出
    public static String fanZhuan(int[] arr){
       String s="";
       s+="[";
       //对数组进行反转操作
        for (int begin = 0,end=arr.length-1; begin<end ; begin++,end--) {

            int temp = arr[begin];
            arr[begin] = arr[end];
            arr[end] = temp;
        }
        //进行拼接
            for (int i = 0; i < arr.length; i++) {
                if(i==arr.length-1){
                    s+=arr[i];
                }else{
                    s+=arr[i];
                    s+=",";
                }
            }
       s+="]";
        return s;
    }
        //反转字符串
        public static String fanzhuan2(String ss){
                String s="";
            for (int i = ss.length()-1; i >=0 ; i--) {
                s+=ss.charAt(i);
            }
            return s;
        }

    public static void main(String[] args) {
       int[] arr={11,22,33,44,55,66};
       String pinjie=pinJie(arr);//调用拼接方法
        System.out.println(pinjie);//输出

        String s=fanZhuan(arr);//调用反转方法
        System.out.println(s);//调用拼接方法并把返回的字符串类型的s输出

        //调用fanzhuan2方法反转字符串
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s1=scan.nextLine();
        //定义s2接收s1反转后的字符串
        String s2=fanzhuan2(s1);
        System.out.println(s2);//输出
    }
}

运行结果
在这里插入图片描述
拓展练习
生成6位数的随机验证码,要求包含大写字母,小写字母,数字,而且数字至少有一个。

import java.util.Random;

public class YanZhengMa {
    public static String yZM(){
        //sb1用于生成所有符合条件的字符串a~zA~Z0~9
        StringBuilder sb1=new StringBuilder();
        for (char i = 'a'; i <='z' ; i++) {
            sb1.append(i);
        }

        for (char i = 'A'; i <='Z' ; i++) {
            sb1.append(i);
        }

        for (char i = '0'; i <='9' ; i++) {
            sb1.append(i);
        }
        //sb2用于接收生成的6位随机字符串
        StringBuilder sb2=new StringBuilder();
        Random r=new Random();
        for (int i = 1; i <=6 ; i++) {
            int index=r.nextInt(sb1.length());//生成6个0到62的数字即为验证码的索引
            sb2.append(sb1.charAt(index));//对sb2进行拼接
        }
        //保证至少有一个数字
        int i=r.nextInt(57-48+1)+48;
        char c=(char)i;
        int index=r.nextInt(sb2.length());
        sb2.setCharAt(index,c);//setCharAt方法为随机替换其中一个元素,即把索引为index的元素替换成了c

          return sb2.toString();//sb2是stringBuilder类型的必须转换为String类型然后返回
    }

    public static void main(String[] args) {
        String yanZhengMa=yZM();
        System.out.println(yanZhengMa);
    }
}

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值