API和String以及StringBuilder的介绍

API和String以及StringBuilder的介绍

API:应用程序编程接口

java API:指JDK中提供的各类功能的java类,我们只需要学会如何使用即可,不需要了解底层代码

Random类

这里简单介绍一下Random类:

  • Random常用于随机生成自然数

生成Random对象代码:

Random random = new Random();

利用Random对象生成随机数:

random.nextInt();//生成一个随机数
random.nextInt(number)//生成一个从0到number之间的随机数

String类

首先简单介绍一下String:

String类在java.lang包下,所以使用时不需要import包

String类代表字符串,java中所有字符串文字都被实现为此类的实例

字符串的特点:

  • 字符串不可变,他们的值在创建后不能被改变
  • 虽然String的值不可变,但可以被共享
  • 字符串效果上等同于char[],但实际上是byte[]

String对象构造方法

String对象构造方法:

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

示例代码:

public class Demo1 {
    public static void main(String[] args) {

        String s1 = new String();
        System.out.println("s1:" + s1);

        char[] chars = {'a','b','c'};
        String s2 = new String(chars);
        System.out.println("s2:" + s2);

        byte[] bytes = {97,98,99};
        String s3 = new String(bytes);
        System.out.println("s3:" + s3);

        String s4 = "abc";
        System.out.println("s4:" + s4);
    }
}

String对象的特点

String对象的特点:

在介绍前我们需要了解栈和堆:

  • 栈:存放包括main在内的所有有顺序的代码
  • 堆:包含常量框和由new创建的对象地址

这里分开介绍由new创建的String对象和直接赋值的String对象:

  • new创建的String对象:

​ JVM会在栈中写出相应代码:String s1 = new String();

​ 但该代码的地址位于堆中,并且该堆指向堆中的常量框中相对应的部分

​ 但由new创建的对象即使内容相同,地址也不相同

  • 直接赋值的String对象:

​ JVM在栈中给出相应代码:String s4 = "abc";

​ 但该代码直接指向常量框中的“abc”

​ 直接赋值的String对象如果内容一样,地址则相同

String方法

下面介绍一些关于String的方法:

方法名 说明
public boolean equals(Object anObject) 比较字符串内容,严格区分大小写
public char charAt(int index) 返回指定索引处的char值
public int length() 返回此字符串的长度

下面给出相关案例逐步介绍方法:

  • public boolean equals(Object anObject):

案例:用户登录

需求:已知用户名和密码,请用程序实现模拟用户登录;一共三次机会,机会没有后给出相关提示

import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {

        //设置用户和密码:
        String username = "HOU";
        String usercode = "ooo";

        //明确三次,使用循环:
        for (int i = 0; i < 3; i++) {
            Scanner scanner = new Scanner(System.in);

            System.out.println("输入账号:\n");
            String name = scanner.nextLine();

            System.out.println("输入密码:\n");
            String code = scanner.nextLine();

            //判断是否满足
            if(username.equals(name) && usercode.equals(code)){
                System.out.println("正在进入游戏中...");
                break;
            } else if (2-i == 0) {
                System.out.println("你的账户被封禁");
            }else {
                System.out.println("你还有" + (2-i) + "次机会");
            }
        }
    }
}
  • public char charAt(int index)和public int length():

案例:遍历字符串

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

import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String s = scanner.nextLine();

        //这里采用s.charAt(i)来获取字符串下标为i的字符
        for (int i = 0; i < s.length(); i++) {
            System.out.println(s.charAt(i));
        }
    }
}

拼接字符串

下面给出一个拼接字符串的案例:

需求:定义一个方法,把int数组中的数据按照指定格式拼接成一个字符字符串返回并且输出

public class Demo5 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {1,2,3};

        //采用方法转换
        String s = intToString(arr);

        System.out.println(s);
    }


    //方法intToString
    public static String intToString(int[] arr){
        //设置返回值
        String result = "";

        result += "[";

        //利用循环拼接:
        for (int i = 0; i < arr.length; i++) {
            //判断,如果是其他位置,需要加空格,如果最后一位不用加空格:
            if(i == arr.length-1){
                result += arr[i];
            } else {
                result += arr[i];
                result += " ";
            }
        }

        result += "]";

        return result;
    }
}

我们可以看到在字符串添加数组时不方便,而且在底层会反复改变字符串(实际上是更换字符串占用空间)

所以下面我们将会介绍到StringBuilder

StringBuilder类

StringBuilder类是一个可变的字符串类,我们可以把它看作一个容器

StringBuilder对象构造方法

方法名 说明
public StringBuilder() 创建一个空白可变字符串,不含有任何内容
public StringBuilder(String str) 根据字符串的内容,创建可变字符串对象

下面给出代码展示:

public class Demo1 {
    public static void main(String[] args) {
        //无参构造
        StringBuilder sb = new StringBuilder();
        System.out.println("sb:" + sb);
        System.out.println("sb.length:" + sb.length());

        //有参构造
        StringBuilder sb2 = new StringBuilder("Hello");
        System.out.println("sb2:" + sb2);
        System.out.println("sb2.length:" + sb2.length());
    }
}

编译结果:

sb:
sb.length:0
sb2:Hello
sb2.length:5

StringBuilder方法

下面介绍一些关于StringBuilder的方法:

方法名 说明
public StringBuilder append(任何类型) 添加数据并返回对象本身
public StringBuilder reverse() 返回相反的字符序列

下面进行代码展示:

public class Demo1 {
    public static void main(String[] args) {
        //无参构造
        StringBuilder sb = new StringBuilder();
        System.out.println("sb:" + sb);
        System.out.println("sb.length:" + sb.length());

        //有参构造
        StringBuilder sb2 = new StringBuilder("Hello");
        System.out.println("sb2:" + sb2);
        System.out.println("sb2.length:" + sb2.length());

        //append方法:
        sb.append("123");
        System.out.println("sb:" + sb);
        System.out.println("sb.length:" + sb.length());

        //append链式方方法:
        sb.append("123").append("123");
        System.out.println("sb:" + sb);
        System.out.println("sb.length:" + sb.length());

        //reverse颠倒方法:
        sb.reverse();
        sb.append("123").append("123");
        System.out.println("sb:" + sb);
        System.out.println("sb.length:" + sb.length());
    }
}

编译结果:

sb:
sb.length:0
sb2:Hello
sb2.length:5
sb:123
sb.length:3
sb:123123123
sb.length:9
sb:321321321123123
sb.length:15

String和StringBuilder相互转换:

  1. StringBuilder->String:
public String.toString();
  1. String->StringBuilder:
public StringBuilder(String s);

下面进行代码展示:

public class Demo2 {
    public static void main(String[] args) {
        //设置原参数:
        String s = "abc";
        StringBuilder sb = new StringBuilder("abcd");

        //String->StringBuilder:
        StringBuilder sbb = new StringBuilder(s);

        //StringBuilder->String:
        String ss = sb.toString();
    }
}

拼接字符串

我们之前采用String类型拼接字符串太过浪费内存

于是我们改用StringBuilder拼接字符串:

public class Demo3 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};

        String s = intToString(arr);

        System.out.println(s);
    }

    public static String intToString(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]);
            } else {
                sb.append(arr[i]).append(" ");
            }
        }

        sb.append("]");

        String s = sb.toString();

        return s;
    }
}

结束语

好的,关于API,Random,String以及变种StringBuilder的讲解就到这里

posted @ 2022-07-06 15:27  秋落雨微凉  阅读(68)  评论(0编辑  收藏  举报