四、字符串【黑马JavaSE笔记】

字符串

(一)API

1.概述

API(Application Programming Interface):应用程序编程接口

Java API :指的就是JDK中提供的各种功能的Java类

这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用


2.帮助文档的使用方法

(1)打开帮助文档

(2)找到索引选项卡中的输入框

(3)在输入框中输入Random

(4)看类在哪个包下

(5)看类的描述

(6)看构造方法

(7)看成员方法



(二)String

1.概述

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

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


2.String类的特点
  • 字符串不可变,他们的值在创建后不能被更改

  • 虽然String的值是不可变的,但是他们可以被共享

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

    注:JDK8及以前是字符串数组,JDK9及以后是字节数组


3.String构造方法

image-20211225191937559

代码演示:

 	    //创建一个空白字符串对象,不含有任何内容
        String s1 = new String();
        System.out.println("s1:" + s1);

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

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

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

4.String对象的特点

(1)通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同

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

代码演示(比较两字符串的地址值是否相同)

//构造方法的方式得到对象
char[] chs = {'a', 'b', 'c'};
String s1 = new String(chs);
String s2 = new String(chs);
System.out.println(s1 == s2);   // false
//直接赋值的方式得到对象
String s3 = "abc";
String s4 = "abc";
System.out.println(s3 == s4);   // ture
//比较字符串地址值是否相同
System.out.println(s1 == s3);   // false

5.字符串比较

使用==做比较

  • 基本类型:比较的是数据值是否相同
  • 引用类型:比较的是地址值是否相同

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

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

代码演示(比较两字符串的内容是否相同)

//构造方法的方式得到对象
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.equals(s2));  // true
System.out.println(s1.equals(s3));  // true
System.out.println(s3.equals(s4));  // true

6.案例
(1)用户登录

image-20211225205010644

代码实现:

public class String_UserLogin {
    public static void main(String[] args) {
        String usename = "admin";
        String password = "admin";

        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < 3; i++) {
            System.out.println("请输入用户名:");
            String name = sc.nextLine();
            System.out.println("请输入密码:");
            String psd = sc.nextLine();

            if (usename.equals(name) && password.equals(psd)) {
                System.out.println("登陆成功!");
                break;
            } else {
                if(i == 2){
                    System.out.println("你的次数已用尽,请与管理员联系!");
                } else {
                    System.out.println("登陆失败,你还有" + (2 - i) + "次机会");
                }
            }
        }
    }
}

(2)遍历字符串

image-20211225205306218

代码实现:

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

        System.out.println("请输入一组字符串:");
        String line = sc.nextLine();

        for (int i = 0; i < line.length(); i++) {
            System.out.println(line.charAt(i));
        }
    }
}

(3)统计字符字数

image-20211225210459355

代码实现:

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

        System.out.println("请输入一组字符串:");
        String line = sc.nextLine();

        //定义三个变量 并赋初始值为0
        int BigCount = 0;
        int SmallCount = 0;
        int NumberCount = 0;

        //循环遍历字符串
        for (int i = 0; i < line.length(); i++) {
            int ch = line.charAt(i);
            if (ch >= 'A' && ch <= 'Z') {
                BigCount++;
            } else if (ch >= 'a' && ch <= 'z') {
                SmallCount++;
            } else if (ch >= '1' && ch <= '9') {
                NumberCount++;
            }
        }
        //输出统计的数据
        System.out.println("大写字母:" + BigCount + "个");
        System.out.println("小写字母:" + SmallCount + "个");
        System.out.println("数字:" + NumberCount + "个");
    }
}

(4)拼接字符串

image-20211225212404999

代码实现:

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

        String s = arrToString(arr);
        System.out.println(s);
    }

    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 += "]";
        return s;
    }
}
(5)字符串反转

image-20211225214019341

代码实现:

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

        System.out.println("请输入一组字符串:");
        String line = sc.nextLine();

        String s = Reverse(line);
        System.out.println(s);
    }

    public static String Reverse(String line) {
        String s = "";

        for (int i = line.length() - 1; i >= 0; i--) {
            s += line.charAt(i);
        }

        return s;
    }
}


(三)StringBuilder

1.概述
(1)StringBuilder是干什么的

如果对字符串进行拼接操作,每次拼接,都会构建一个新的String独享,既耗时,又浪费空间,而且这种操作还无法避免。所以Java提供了一种更好的解决方式就是使用StringBuilder类

(2)String和StringBuilder的区别
  • String:内容是不可变的
  • StringBuilder:内容是可变的

2.StringBuilder的构造方法
  • public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容
  • public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象
public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    System.out.println(sb.length()); // 0

    StringBuilder sb2 = new StringBuilder("asds");
    System.out.println(sb2.length()); // 4
}

3.StringBuilder的添加和反转方法
  • public StringBuilder append(任意类型) 添加数据,并返回对象本身(这样就可以使用链式编程)
  • public StringBuilder reverse() 返回相反的字符序列
 public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();

        //StringBuilder添加
	   /*sb.append("hello");
         sb.append("java");
         sb.append("world");*/
        sb.append("hello").append("java").append("world");  //  链式编程,因为对象调用完方法后返回的值还是 对象本身
        System.out.println(sb); //  hellojavaworld

        //StringBuilder反转
        sb.reverse();
        System.out.println(sb); //  dlrowavajolleh
    }

4.StringBuilder和String相互转换
(1)StringBuilder转换为String

public String toString():通过 toString()就可以实现把StringBuilder转换为String

范例:

// StringBuilder转换为String
StringBuilder sb = new StringBuilder("java");
String s = sb.toString();
System.out.println(s);
(2)String转换为StringBuilder

public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder

范例:

//String转换为StringBuilder
String s2 = "abc";
StringBuilder sb2 = new StringBuilder(s2);
System.out.println(sb2);

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
黑马javase笔记是一份比较详细的Java基础学习笔记,适合初学者或者复习巩固Java知识的人使用。这份笔记是作者在两年时间内多次复习Java后总结出来的,其中包括了不同老师的举例和作者自己的感悟。这份笔记的内容力求通俗易懂,同时也包括了方法区和JVM(Java Virtual Machine)的介绍。方法区是字节码文件加载时进入内存的区域,字节码文件由Java源文件编译而成。JVM是Java虚拟机,用来运行Java字节码文件,它的关键作用是屏蔽了不同操作系统之间的差异,使得相同的Java程序可以在不同的操作系统上得到相同的结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java基础笔记MarkDown版4万字肝吐血](https://download.csdn.net/download/qq_33865785/88275967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【学习笔记/自用】黑马程序员javase2023版-基础](https://blog.csdn.net/qq_41014040/article/details/129164451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-BoBooY-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值