20230415 API(String )

常用API(String 、ArrayList)
(Application Programming Interface)

String简单介绍
  String 类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。

  String

一、String类概述

  1.java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
  2.Java程序中的所有字符串文字都为此类的对象


  String类的特点详解:
    String其实常被成为不可变字符串类型它的对象在创建后不可以被更改

  字符串对象存在哪里?
    1.以“”方式给出的字符串对象,在字符串常量池中存储。

package com.yushao.string;

public class StringDemo1 {
    public static void main(String[] args) {
        String name = "玉少";
        name += "吃瓜";
        name += "干饭";
        System.out.println(name);
    }
}
//玉少吃瓜干饭

 

  String是不可变字符串的原因?
    1.String变量每次的修改其实都是产生并指向了新的字符串对象。
    2.原来的字符串对象都是没有改变的,所以称不可变字符串。


二、String类创建对象的2种方法


  1.方法一:直接使用“”定义。(推荐方式)
    String name = “玉少”;
  2.方法二:通过String类的构造器创建对象。
    public String() 创建一个空白字符串对象,不含有任何内容
    public String(String original) 根据传入的字符串内容,来串讲字符串对象
    public String(char[] chs) 根据字符数组的内容,来创建字符串对象
    public String(byte[] chs) 根据字符数组的内容,来创建字符串对象

 

package com.yushao.string;

public class StringDemo2 {
    public static void main(String[] args) {
//        1.方法一:直接使用“”定义。(推荐方式)
//        String name = “玉少”;
        String name = "玉少";
        System.out.println(name);
//        2.方法二:通过String类的构造器创建对象。
//            public String()     创建一个空白字符串对象,不含有任何内容(几乎不用)
        String s1 = new String();
        System.out.println(s1);
//            public String(String original) 根据传入的字符串内容,来串讲字符串对象 (几乎不用)
        String s2 = new String("我是中国人");
        System.out.println(s2);
//            public String(char[] chs) 根据字符数组的内容,来创建字符串对象
        char[] chars = {'a' , 'b', 'c' , '中' , '国'};
        String s3 = new String(chars);
        System.out.println(s3);
//            public String(byte[] chs) 根据字符数组的内容,来创建字符串对象-
        byte[] bytes = {97,98,99,65,66,67};
            String s4  = new String(bytes);
        System.out.println(s4);

    }
}
/*玉少

我是中国人
abc中国
abcABC*/

 


  区别:
    1.以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。(这个地方可以节省内存)
    2.通过构造器new的对象,每new一次都会产生一个新对象,放在堆内存中。

 

//        这个地方是String类创建对象的两种方法的区别
        System.out.println("--------------------");
        String ss1 = "abc";
        String ss2 = "abc";
        System.out.println(ss1 == ss2);


        char[] char1 = {'a' , 'b', 'c' , '中' , '国'};
        String ss3 = new String(char1);
        String ss4 = new String(char1);
        System.out.println(ss3 == ss4);
/*true
false
*/

 

 

  字符串对象的特点:
    1.双引号创建的字符串对象,在字符串常量池中存储同一个。
    2.通过new构造器创建的字符串对象,在堆内存中分开存储。

 

三、String类常见面试题

package com.yushao.string;

public class StringDemo3 {
    public static void main(String[] args) {
//        1、
//        这个地方是创建了两个对象,即一个是:带双引号的abc放在字符串常量池里面,还有一个是new出来的放在堆内存里面的
        String s2 = new String("abc");
        
//        这个的地方没有创建对象,因为上面已经有abc在字符串常量池里头,所以没有。
        String s1 = "abc";
        System.out.println(s1 == s2);//true
        
//        2、
        String s3 = "abc";//放在字符串常量池中。
        String s4 = "ab";
        String s5 = s4 + "c";//因为s4不是直接带括号的“ab”,所以,他会和“c”结合成新的abc然后在堆内存中,产生地址,给s5
        System.out.println(s5 == s3);//false
        
        String s6 = "abc";
        String s7 = "a" + "b" + "c";
        System.out.println(s6 == s7);//true
//        java存在编译优化机制,程序在编译是:"a" + "b" + "c"会直接转成"abc"
        
    }
}

 

四、String类常见API-字符串内容比较

 

package com.yushao.string;

import java.sql.SQLOutput;
import java.util.Scanner;

public class StringEqualsDemo4 {
    public static void main(String[] args) {
        //1.正确登录名和密码
        String okName = "yushao";
        String okPassword = "123456";

        //2.用户输入密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入用户名");
        String name = sc.next();
        System.out.println("输入密码");
        String password = sc.next();

        //3.判断用户输入的和原本的是否对

/*        if (okName == name && okPassword == password) {
            System.out.println("输入账号密码正确");
        }else {
            System.out.println("输入错误");
        }
        //输入错误
        */
//        这个地方出现问题,他们俩的地址不同,所以输出的结果是:输入错误。


        //解决方法
        //此时可以调用Stirng里面的equals方法,它可以只判断String里面的内容,而不看地址
        if (okName.equals(name)  && okPassword.equals(password)) {
            System.out.println("输入账号密码正确");
        }else {
            System.out.println("输入错误");
        }


        //4.忽略大小写比较内容的API,一般用于比较验证码这样的业务
        String sysCode = "234ADF";
        String code1 = "234adf";
        System.out.println(sysCode.equals(code1));//false
        System.out.println(sysCode.equalsIgnoreCase(code1));//true

    }
}

    1.如果是字符串比较应该使用什么方式进行比较,为什么?
      使用String提供的equlas方法。
      只关心内容一样就返回true。
    2.开发中什么时候使用==比较数据
      基本数据类型比较时使用。

 

五、String类常见API-遍历、替换、截取、分割操作

 

public int length() 返回此字符串的长度
Public char charAt() 获取某个索引位置处的字符
public char[] toCharArray() 将当前字符串转换成字符数组返回
public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
public String substring(int behinIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
Public String replace(CharSequence target,CharSequence replacement)  使用新值,将字符串中的旧值替换,得到新的字符串。
public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回。
   

 

 

package com.yushao.string;

public class StringAPIOtherDemo5 {
    public static void main(String[] args) {
//        1.public int length() 返回此字符串的长度
        String name = "我是yushao";
        System.out.println(name.length());//8

//        2.Public char charAt() 获取某个索引位置处的字符
        char c = name.charAt(1);
        System.out.println(c);//

        System.out.println("-------字符串的遍历--------");

        for (int i = 0; i < name.length(); i++) {
            System.out.println(name.charAt(i));
        }
//        3.public char[] toCharArray():  将当前字符串转换成字符数组返回
        char[] chars = name.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char ch = chars[i];
            System.out.println(ch);
        }

//        4.public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
        String name2 = "java是最厉害的编程语言";
        String rs = name2.substring(0,9);
        System.out.println(rs);//java是最厉害的
        String rs1 = name2.substring(4,9);
        System.out.println(rs1);//是最厉害的

//        5.public String substring(int behinIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
        String rs2 = name2.substring(4);
        System.out.println(rs2);

//        6.Public String replace(CharSequence target,CharSequence replacement)  使用新值,将字符串中的旧值替换,得到新的字符串。
        String name3 = "玉少是真的厉害,加油玉少!";
        String rs3 = name3.replace("玉少", "**");
        System.out.println(rs3);//**是真的厉害,加油**!

//        7.public boolean contains(CharSequence s)//输入的内容是否在里面可以找到
        System.out.println(name3.contains("玉少"));//true
        System.out.println(name3.contains("玉多"));//false

//        8.public boolean startWith(String prefix)//开头是否是输入的字符串
        System.out.println(name3.startsWith("玉少"));//true
        System.out.println(name3.startsWith("玉少真帅!"));//false
//        9.public String[] split(String regex)  根据传入的规则切割字符串,得到字符串数组返回。
        String name4 = "王宝强,贾乃亮,陈羽凡";
        String[] names = name3.split(",");
        for (int i = 0; i < names.length; i++) {
            System.out.println("您选择的是:" + names[i]);
        }
//        您选择的是:王宝强
//        您选择的是:贾乃亮
//        您选择的是:陈羽凡


    }
}

 


六、String类案例实战

  1)String类开发验证码功能
     需求:随机产生一个5位的验证码,每位可能是数字,大写字母,小写字母

    分析:
      1.定义一个String类型的变量存储a—z,A—Z,0—9之间的全部字符。
      2.循环5次,随机一个范围内的索引,获取对应字符连接起来即可。

package com.yushao.string;

import java.util.Random;

public class StringExec6 {
    public static void main(String[] args) {
//        1.定义可能出现的字符信息
        String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";


//        2.循环5次,每次生成一个随机的索引,提取对应的字符连接即可
        String code = "";
        Random r = new Random();
        for (int i = 0; i < 5; i++) {
            int index = r.nextInt(datas.length());
            char c = datas.charAt(index);
            code += c;
        }

//        3.输出字符串数组即可
        System.out.println(code);
    }
}

  

   2)模拟用户登录功能
    需求:模拟用户登录功能,最多只给三次机会
    分析:

      1.系统后台定义好正确的登录名称,密码。
      2.使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登录成功则不再进行登录,登录失败则给出提示,并让用户继续登录。

package com.yushao.string;

import java.util.Scanner;

public class StringExec7 {
    public static void main(String[] args) {
        //定义正确的用户名和密码
        String okName = "admin";
        String okPassword = "yushao";

        //2.定义一个循环,循环3次,让用户登录
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i <3; i++) {
            System.out.println("请输出用户名");
            String setName = sc.next();
            System.out.println("请输入密码!");
            String setPassword = sc.next();
            
            //3.判断登录是否成功!
            if (okName.equals(setName)) {
                //4.判断密码是否正确
                if (okPassword.equals(setPassword)) {
                    System.out.println("密码正确,请浏览网页!");
                    break;
                }else {
                    //密码错误
                    System.out.println("您的用户名输入不正确!,您还剩余" + (3 - i) + "次机会");
                }
            }else{
                System.out.println("您的用户名输入不正确!,您还剩余" + (3 - i) + "次机会");
            }
            
        }
        
    }
}

 

    3)手机号码屏蔽
      需求:
        以字符串的形式从键盘接收到一个手机号,将中间四位号码屏蔽,最终结果为:158****8987
      分析:
        1.键盘录入一个字符串,用Scanner实现
        2.截取字符串前三位,截取字符串后四位
        3.将截取后的两个字符串,中间加上****进行拼接,输出结果即可。

 

package com.yushao.string;

import java.util.Scanner;

public class StringExec8 {
    public static void main(String[] args) {
        //手机号码屏蔽
        //1.先键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入手机号码。");
        String numbers = sc.next();

        //2.截取号码的前三位和后四位。
        String before = numbers.substring(0,3);
        String after = numbers.substring(7);

        String s = before + "****" + after;
        System.out.println(s);
    }
}

 

posted @ 2023-04-23 23:51  shihunyushao  阅读(59)  评论(0)    收藏  举报