1-Java常用API第一部分----String类

1.String

  1. String概述

​ String类在java.lang包下,所以使用的时候不需要导包

​ String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例,也就是说,Java程序中所有的双引号字符串,都是String类的对象。

  1. 字符串的特点

    ①:字符串不可变,它们的值在创建后不能被更改

    ②:虽然String的值是不可变的,但是它们可以被共享

    ③:字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[]).

2.String构造方法

推荐:推荐使用直接赋值的方式得到字符串对象

方法名说明
public String()创建一个空白字符串对象,不含有任何内容
public String(char[] chs)根据字符数组的内容来创建字符串对象
public String(byte[]bys)根据字节数组的内容,来创建字符串对象
String s = “abc”直接赋值的方式创建字符串对象,内容就是abc

//        | public String()           | 创建一个空白字符串对象,不含有任何内容    |
//        | ------------------------- | ----------------------------------------- |
//        | public String(char[] chs) | 根据字符数组的内容来创建字符串对象        |
//        | public String(byte[]bys)  | 根据字节数组的内容,来创建字符串对象      |
//        | String s = “abc”          | 直接赋值的方式创建字符串对象,内容就是abc |
public class minglei {
    public static void main(String[] args) {
        // 1. public String() : 创建一个空白字符串对象,不含有任何内容
        String s1 = new String();
        System.out.println("s1:"+s1);

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

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

        // 4. String s = “abc” :直接赋值的方式创建字符串对象,内容就是abc
        String s4 = "abc";
        System.out.println("s4:"+s4);
    }
}

3.String对象的特点

  1. 通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同。
char[] chs = {'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);

上面代码中,JVM会首先创建一个字符串数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相的。

  1. 以“ ”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会创建一个String对象,并在字符串池中维护。
String s3 = "abc";
String s4 = "abc";

在上面的代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考,第二行则让s4直接参考字符串池中的String对象,也就是说它们本质上是同一个对象。


public class minglei {
    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);
        //结果为false,因为new一个对象就会分配一个地址,所以s1和s2的地址值不同
        String s3 = "abc";
        String s4 = "abc";
        System.out.println(s3 == s4);
        //结果为true,使用" "方法时,“ ”中的字符串相同时(顺序和大小写都相同时),系统会只给分配一个地址值
        System.out.println(s1 == s4);
    }
}

4.字符串的比较

  1. 使用==做比较

​ ①:基本类型:比较的是数据值是否相同

​ ②:引用类型:比较的是地址值是否相同

  1. 字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()

​ ①:public boolean equals(Object anObject):将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串

public class minglei {
    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";

        //比较地址值
        System.out.println(s1 == s2);
        System.out.println(s3 == s4);
        System.out.println(s4 == s1);

        //比较字符串内容是否相同
        System.out.println(s1.equals(s2));
        System.out.println(s2.equals(s4));
        System.out.println(s4.equals(s1));
    }
}
 /*结果:
        false
        true
        false
        true
        true
        true

        Process finished with exit code 0*/

1.案例:用户登录

需求:已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示。

import java.util.Scanner;
public class minglei {
    public static void main(String[] args) {
        //已有的账号和密码
       String userName = "123456";
       String passWord = "000001";
       Scanner sc = new Scanner(System.in);
        System.out.println("注意:用户名和密码只能输错3次");
       for (int i=0 ; i<=3 ; i++) {
           //处理三次全错的情况
           if(i==3){
               System.out.println("三次输入全错,账号锁死");
               break;
           }
           //第一次输入的时候,不提示剩余输入次数
           if(i==0){
               
               //输入用户名和密码
               System.out.println("请输入用户名:");
               String s1 = sc.nextLine();
               System.out.println("请输入用户密码:");
               String s2 = sc.nextLine();
               
               //判断是否登录成功
               if (userName.equals(s1)&&passWord.equals(s2)){
                   System.out.println("登录成功");
                   break;
               }else {
                   System.out.println("登录失败,您的用户名或密码错误,请重新输入");
               }
           }else {
               //第一次以后输入的情况,提示剩余输入次数
               //输入用户名和密码
               System.out.println("剩余输入次数"+(3-i)+"次,请再次输入用户名:");
               String s1 = sc.nextLine();
               System.out.println("剩余输入次数"+(3-i)+"次,请再次输入用户密码:");
               String s2 = sc.nextLine();
               if (userName.equals(s1)&&passWord.equals(s2)){
                   System.out.println("登录成功");
                   break;
               }else {
                   //区别最后一次输入和前几次登录失败的情况---最后一次登录成败不提示请重新输入
                   if(i==2){
                       System.out.println("登录失败,您的用户名或密码错误");
                   }else {
                       System.out.println("登录失败,您的用户名或密码错误,请重新输入");
                   }
               }
           }
       }
    }
}

2.遍历字符串

需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串。

提示:public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的。

字符串的长度:public int length():返回此字符串的长度

​ ① 字符串对象.length()

import java.util.Scanner;

public class stringTtraversal {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        for(int i = 0;i<line.length();i++){
            System.out.println(line.charAt(i));
        }
    }
}

3.案例:统计字符次数

需求:键盘录入一个字符串,统计该字符串中大小写字母字符,数字字符出现的次数(不考虑其他字符)

①:判断该字符属于哪种类型,直接判断该字符是否在对应范围即可----例、大写字母:ch>=’A’&&ch<=’Z’

​ 小写字母:ch>=‘a’&&ch<=‘z’

​ 数字:ch>=‘0’&&ch<=‘9’

import java.util.Scanner;

public class stringTtraversal {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        int uppercase =0;//记录大写字母个数
        int b =0;//记录小写字母个数
        int number =0;//记录数字个数
        //循环遍历字符串
        for(int i = 0;i<line.length();i++){
            char a = line.charAt(i);
            //计算各种字符的个数
            if (a>='a'&&a<='z'){
                b++;
            }
            else if (a>='A'&&a<='Z'){
                uppercase++;
            }
            else if(a>='0'&&a<='9'){
                number++;
            }
        }
        //输出各种字符个数
        System.out.println("大写字母一共有:"+uppercase+"个");
        System.out.println("小写字母一共有:"+b+"个");
        System.out.println("数字一共有:"+number+"个");
    }
}

4.案例:拼接字符串

需求:定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如、数组int[]arr={1,2,3};,执行方法后输出结果为:{1,2,3}

public class stringTtraversal {
    public static void main(String[] args) {
       int []arr = {1,2,3};
       String a=ArrToString(arr);
        System.out.println(a);
    }
    //定义拼接方法
    public static String ArrToString(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;
    }
}

5.案例:字符串反转

需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果。例如、键盘录入abc,输出结果cba。

import java.util.Scanner;
public class stringTtraversal {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        String s = rollback (line);
        System.out.println(s);
    }
    public static String rollback(String L){
        //定义一个字符串存储反转过来的字符串L
        String l ="";
        //从后往前遍历字符串L,并逐个赋值给l,以实现反转
        for (int i=L.length()-1;i>=0;i--){
            l+=L.charAt(i);
        }
        //返回反转好的字符串
        return l;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幺洞两肆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值