String和StringBuilder类

一.String

所谓的字符串就是值一连串的字符,它是由许多单个字符连接而成的,这些字符必须包含在一对双引号" "之内。

1.字符串的创建
1.1字符串的创建代码示列
public static void main(String[] args) {
    //创建一个空白字符串,不包含任何内容
    String s1=new String();
    System.out.println("s1:"+s1);

    //根据字符数组的内容,来创建字符串对象
    char[] chs={'a','b','c'};
    String s2=new String(chs);
    System.out.println("s2:"+s2);

    //根据字节数组的内容,来创建字符串对象,会根据ascall码表进行转换
    byte[] bys={97,98,99};
    String s3=new String(bys);
    System.out.println("s3:"+s3);

    //直接赋值的方式创建字符串对象
    String s4="hahaha";
    System.out.println("s4:"+s4);
}

运行结果

s1:
s2:abc
s3:abc
s4:hahaha

知识点补充

  • 字符串不可变,它们的值在创建后不能被更改,虽然String的值不可变,但是它们可以被共享。
  • 推荐使用直接赋值的方式得到字符串。
1.2构造方法创建和直接赋值方法的比较
public static void main(String[] args) {
    //构造方法得到的对象,地址不同
    char[] chs={'a','b','c'};
    String s1=new String(chs);
    String s2=new String(chs);
    System.out.println(s1==s2);
    //直接赋值的方法得到的对象,s2和s3本质上是相同的,他们的地址会相同
    String s3="abc";
    String s4="abc";
    System.out.println(s3==s4);
}

运行结果

false
true

知识点补充

  • 通过构造方法得到的字符串对象,地址值不同。
  • 通过直接赋值的方法的字符串,如果内容相同,那么它们本质上是一样的,地址也相同。
2.字符串拼接
public static void main(String[] args) {
    String s1 = "abc";
    String s2 = "def";
    String s3 = "ghi";
    String s4 = "jkl";

    String sum = s1 + s2 + s3 + s4;//字符串内容不可改变
    //abcdef abcdefghi abcdefghijkl会形成新的三个字符串
    System.out.println(sum);
}

运行结果

abcdefghijkl

知识点补充

  • 因为字符串床架年后它就不能被改变,所以,字符串拼接时是形成了一个额外的新的字符串。
3.字符串内容和地址的比较
   public static void main(String[] args) {
        //构造方法创建对象
        char[] chs={'a','b','c'};
        String s1=new String(chs);
        String s2=new String(chs);
        //直接赋值创建对象
        String s3="abc";
        String s4="abc";
        String s5="Abc";
        //比较的是地址值是否一样
        System.out.println(s1==s2);
        System.out.println(s1==s3);
        System.out.println(s3==s4);
        System.out.println(s4==s5);
        System.out.println("------------------");
        //比较的是内容是否一样
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println(s3.equals(s4));
        System.out.println(s4.equals(s5));
        System.out.println(s4.equalsIgnoreCase(s5));//比较字母忽略大小写
    }

运行结果

false
false
true
false
------------------
true
true
true
false
true

知识点补充

  • 使用==做比较:
    基本数据类型:比较的是数据值是否相同
    引用类型:比较地址值是否相同
  • 使用equals 做比较
    比较字符串内容是否相同
3.1代码示列

登录用户名和密码验证

 public static void main(String[] args) {
    String username="root";
    String password="123456";
    Scanner sc=new Scanner(System.in);
    int count=3;
    while (true){
        System.out.println("请输入用户名:");
        String name=sc.nextLine();
        System.out.println("请输入密码:");
        String pwd=sc.nextLine();

        if (username.equals(name)&&password.equals(pwd)){
            System.out.println("登录成功");
            break;
        }else {
            if (count==0){
                System.out.println("你没有机会了");
            }else {
                System.out.println("你还有"+count+"次机会");
                count--;
            }

        }
    }
}

运行结果

请输入用户名:
root
请输入密码:
123456
登录成功
3.字符串的遍历
public static void main(String[] args) {
    String s="今宵酒醒何处,杨柳岸,晓风,残月";
    //获取字符串长度
    int a = s.length();
    System.out.println(a);
    //字符串遍历
    for (int i = 0; i <s.length() ; i++) {
        char f=s.charAt(i);
        System.out.print(f+" ");
    }
}

运行结果

16
今 宵 酒 醒 何 处 , 杨 柳 岸 , 晓 风 , 残 月 
4.统计字符类型次数
public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    System.out.print("请输入字符串:");
    String s = sc.nextLine();
    int bigCount=0;
    int smallCount=0;
    int numberCount=0;
    int otherCount=0;
    for (int i = 0; i <s.length() ; i++) {
        char ch=s.charAt(i);  //取出字符串中索引i位的字符
        if (ch>='A'&&ch<='Z'){
            bigCount++;
        }else if (ch>='a'&&ch<='z'){
            smallCount++;
        }else if (ch>='0'&&ch<='9'){
            numberCount++;
        }else {
            otherCount++;
        }
    }
    System.out.println(bigCount);
    System.out.println(smallCount);
    System.out.println(numberCount);
    System.out.println(otherCount);
}

运行结果

请输入字符串:AA45sfAD6fs
4
4
3
0
5.对数组进行字符串拼接
public static void main(String[] args) {
    int[] arr={1,2,3};
    String s = arrayToString(arr);
    System.out.println("s:"+s);
    String s1 = Arrays.toString(arr);
    System.out.println(s1);
}

public static String arrayToString(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]+", ";
       }
    }
    return s;
}

运行结果

s:[1, 2, 3]
[1, 2, 3]
6.字符串反转
import java.util.Scanner;

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入一个字符串:");
    String s = sc.nextLine();
    String r = reverse(s);
    System.out.println(r);
}

private static String reverse(String s) {
    String ss="";
    for (int i =s.length()-1 ; i >=0 ; i--) {
        ss+=s.charAt(i);
    }
    return ss;
}

运行结果

请输入一个字符串:
assfahfjs
sjfhafssa

二.StringBuilder

1.StringBuilder添加和反转方法和链式编程
public static void main(String[] args) {
    //创建对象
    StringBuilder sb = new StringBuilder();
    sb.append("hello");
    sb.append("world");
    sb.append("java");
    System.out.println("sb:"+sb);

    //链式编程
    StringBuilder sb1 = new StringBuilder();
    sb1.append("hello").append("world").append("haha");
    System.out.println("sb1:"+sb1);

    //字符串反转
    sb1.reverse();
    System.out.println("sb1:"+sb1);
}

运行结果

sb:helloworldjava
sb1:helloworldhaha
sb1:ahahdlrowolleh

知识点补充

  • String:内容不可变
  • StringBuilder:内容可变的
2.StringBuilder和String相互转换
public static void main(String[] args) {
    String s="清明上河图";

    //String转StringBuilder
    StringBuilder sb=new StringBuilder(s);
    sb.reverse();
    System.out.println(sb);

    //StringBuilder转String
    String s1 = sb.toString();
    System.out.println(s1);
}

运行结果

图河上明清
图河上明清
3.数组元素使用StringBuilder拼接成字符串
public static void main(String[] args) {
    int[] arr = {1, 2, 3, 4, 5};
    String s = arrToString(arr);
    System.out.println(s);
}

private static String arrToString(int[] arr) {
    StringBuilder sb = new StringBuilder();
    sb.append("[");
    for (int i = 0; i < arr.length; i++) {
        if (i == arr.length - 1) {
            sb.append(arr[i]).append("]");
        } else {
            sb.append(arr[i]).append(", ");
        }
    }
    String s = sb.toString();
    return s;
}

运行结果

[1, 2, 3, 4, 5]
4.字符串反转(简化)
    public static void main(String[] args) {
        String s = "123456789";
        String s1 = myReverse(s);
        System.out.println(s1);
    }

    public static String myReverse(String str) {
//        StringBuilder sb=new StringBuilder(str);
//        String ss=sb.reverse().toString();
//        return ss;
        return new StringBuilder(str).reverse().toString();
    }

运行结果

987654321
5.数组转化成字符串输出(简化)
public static void main(String[] args) {
    int[] arr={1,2,3,4,5};
    String s= Arrays.toString(arr);
    System.out.println(s);
}

运行结果

[1, 2, 3, 4, 5]
6.StringBuffer类

StringBuffer类和StringBuilder差不多, StringBuffer类更安全,但是效率更低,这里就不进行更多的赘述了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值