• JAVA基础12:字符串(上)


    1.API

    1)API概述

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

    编写一个机器人程序去控制机器人踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等各种命令。机器人厂商一定会提供用于控制机器人的接口类,这些类中定义好了操作机器人各种动作的方法。其实,这些接口类就是机器人提供给应用程序编程的接口,大家把这些类称为API

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

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

    2)如何使用帮助文档

    ①右键打开该文档

    ②找到索引选项卡中的输入框

    ③在输入框中输入Random

    ④看类在哪个包下

    ps:java.lang下的包不需要导包的

    ⑤看类的描述

    ⑥看构造方法

    ⑦看成员方法

    3)API使用练习

    需求:按照帮助文档使用步骤学习Scanner类的使用,并实现键盘录入一个字符串,最后输出在控制台

    注意:

    调用方法的时候,如果方法有明确的返回值,我们用变量接收

    可以手动完成,也可以使用快捷键的方式完成(Ctrl + Alt + V)

    1. package com.maicangfenxiang;
    2. import java.util.Scanner;
    3. public class ScannerDemo {
    4. public static void main(String[] args) {
    5. //创建对象
    6. Scanner sc = new Scanner(System.in);
    7. System.out.println("请输入一个字符串数据:");
    8. //接收数据
    9. String line = sc.nextLine();//Ctrl + Alt + V
    10. //输出结果
    11. System.out.println("您输入的数据是:" + line);
    12. }
    13. }

    2.String

    1)String概述

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

    String类代表字符串,Java程序中的所有字符串文字(例如"abc")都被实现为此类的实例

    也就是说,Java程序中所有的双引号字符串,都是String类的对象

    2)字符串的特点

    • 字符串不可变,它们的值在创建后不能被更改
    • 虽然String的值是不可变的,但是它们可以被共享

    字符串效果上相当于字符数组(char[])(JDK8及以前是字符数组,JDK9及以后是字节数组),但是底层原理是字节数组(byte[])

    3)String构造方法

    方法名

    说明

    public String()创建一个空白字符串对象,不含有任何内容
    public String(char[] chs)根据字符数组的内容,来创建字符串对象
    public String(byte[] bys)根据字节数组的内容,来创建字符串对象
    String s = "abc"直接赋值的方式创建字符串对象,内容就是abc
    1. package com.maicangfenxiang;
    2. //String构造方法,推荐使用直接赋值得到字符串对象
    3. public class StringDemo {
    4. public static void main(String[] args) {
    5. //public String() 创建一个空白字符串对象,不含有任何内容
    6. String s1 = new String();
    7. System.out.println("s1:" + s1);
    8. //public String(char[] chs) 根据字符数组的内容,来创建字符串对象
    9. char[] chs = {'a', 'b', 'c'};
    10. String s2 = new String(chs);
    11. System.out.println("s2:" + s2);
    12. //public String(byte[] bys) 根据字节数组的内容,来创建字符串对象
    13. byte[] bys = {97, 98, 99};
    14. String s3 = new String(bys);
    15. System.out.println("s3:" + s3);
    16. //String s = "abc" 直接赋值的方式创建字符串对象,内容就是abc
    17. String s4 = "abc";
    18. System.out.println("s4:" + s4);
    19. }
    20. }

    4)String对象的特点

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

    1. char[] chs = {'a','b','c'};
    2. String s1 = new String(chs);
    3. String s2 = new String(chs);

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

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

    1. String s3 = "abc";
    2. String s4 = "abc";

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

    5)字符串的比较

    使用 == 做比较

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

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

    • public boolean equals(Object anObject):将此字符串与指定对象进行比较,由于我们比较的是字符串对象,随意参数直接传递一个字符串
    1. package com.maicangfenxiang;
    2. //字符串的比较
    3. public class StringDemo {
    4. public static void main(String[] args) {
    5. //构造方法的方式得到对象
    6. char[] chs = {'a', 'b', 'c'};
    7. String s1 = new String(chs);
    8. String s2 = new String(chs);
    9. //直接赋值的方式得到对象
    10. String s3 = "abc";
    11. String s4 = "abc";
    12. //比较字符串对象地址是否相同
    13. System.out.println(s1 == s2);
    14. System.out.println(s1 == s3);
    15. System.out.println(s3 == s4);
    16. System.out.println("--------------");
    17. //比较字符串内容是否相同
    18. System.out.println(s1.equals(s2));
    19. System.out.println(s1.equals(s3));
    20. System.out.println(s3.equals(s4));
    21. }
    22. }

    6)案例:用户登录

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

    1. package com.maicangfenxiang;
    2. import java.util.Scanner;
    3. //需求:已知用户名和密码,请用程序实现模拟用户登录。总共给三次集会,登录之后,给出相应的提示
    4. public class StringTest01 {
    5. public static void main(String[] args) {
    6. //已知用户名和密码,定义两个字符串
    7. String userName = "maicangfenxiang";
    8. String password = "1234567";
    9. //键盘录入数据
    10. Scanner sc = new Scanner(System.in);
    11. for(int i = 0;i<3;i++) {
    12. System.out.println("请输入用户名:");
    13. String name = sc.nextLine();
    14. System.out.println("请输入密码:");
    15. String pwd = sc.nextLine();
    16. if (name.equals(userName) && pwd.equals(password)) {
    17. System.out.println("登录成功");
    18. break;
    19. } else {
    20. if(2-i == 0){
    21. System.out.println("你的账户被锁定,请与管理员联系");
    22. }else {
    23. System.out.println("登录失败,你还有" + (2 - i) + "次集会");
    24. }
    25. }
    26. }
    27. }
    28. }

    7)案例:遍历字符串

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

    1. package com.maicangfenxiang;
    2. import java.util.Scanner;
    3. //需求:键盘录入一个字符串,使用程序实现在控制台遍历字符串
    4. public class StringTest02 {
    5. public static void main(String[] args) {
    6. //键盘录入一个字符串
    7. Scanner sc = new Scanner(System.in);
    8. System.out.println("请输入一个字符串:");
    9. String line = sc.nextLine();
    10. //遍历字符串
    11. for(int i=0;i
    12. System.out.println(line.charAt(i));
    13. }
    14. }
    15. }

    8)案例:统计字符次数

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

    1. package com.maicangfenxiang;
    2. import java.util.Scanner;
    3. //需求:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
    4. public class StringTest03 {
    5. public static void main(String[] args) {
    6. //键盘录入一个字符串
    7. Scanner sc = new Scanner(System.in);
    8. System.out.println("请输入一个字符串:");
    9. String line = sc.nextLine();
    10. //定义三个统计变量,初始值为0
    11. int bigCount = 0;
    12. int smallCount = 0;
    13. int numberCount = 0;
    14. //遍历字符串
    15. for (int i = 0; i < line.length(); i++) {
    16. char ch = line.charAt(i);
    17. if ('A' <= ch && ch <= 'Z') {
    18. bigCount++;
    19. } else if ('a' <= ch && ch <= 'z') {
    20. smallCount++;
    21. } else if ('0' <= ch && ch <= '9') {
    22. numberCount++;
    23. }
    24. }
    25. System.out.println("大写字母:"+bigCount+",小写字母:"+smallCount+",数字:"+numberCount);
    26. }
    27. }

    9)案例:拼接字符串

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

    1. package com.maicangfenxiang;
    2. /*
    3. 需求:定义一个方法,把int数组中的数据按照指定的格式拼接称一个字符串返回,
    4. 调用该方法,并在控制台输出结果。例如:数组为int[] arr = {1,2,3};,
    5. 执行方法后的输出结果为:[1,2,3]
    6. */
    7. public class StringTest04 {
    8. public static void main(String[] args) {
    9. //定义一个int数组
    10. int[] arr = {1, 2, 3};
    11. String s = arrayToString(arr);
    12. System.out.println(s);
    13. }
    14. //定义方法
    15. public static String arrayToString(int[] arr) {
    16. String line = "";
    17. line += "[";
    18. for (int i = 0; i < arr.length; i++) {
    19. if (i == arr.length - 1) {
    20. line += arr[i];
    21. } else {
    22. line += arr[i];
    23. line += ",";
    24. }
    25. }
    26. line += "]";
    27. return line;
    28. }
    29. }

    10)案例:字符串反转

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

    例如:键盘录入abc,输出结果cba

    1. package com.maicangfenxiang;
    2. import java.util.Scanner;
    3. /*
    4. 需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
    5. 例如:键盘录入abc,输出结果cba
    6. */
    7. public class StringTest05 {
    8. public static void main(String[] args) {
    9. //键盘录入一个字符串
    10. Scanner sc = new Scanner(System.in);
    11. System.out.println("请输入一个字符串:");
    12. String line = sc.nextLine();
    13. String s = reverse(line);
    14. System.out.println("s:"+s);
    15. }
    16. public static String reverse(String s){
    17. String ss = "";
    18. for(int i=s.length()-1;i>=0;i--){
    19. ss += s.charAt(i);
    20. }
    21. return ss;
    22. }
    23. }

    11)通过帮助文档查看String中的方法

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

  • 相关阅读:
    (已导出) hyperv创建ubuntu20.10 ubuntu18.04虚拟机
    _linux 进程间通信(命名管道)
    22【数据库连接池】
    王道3.1 顺序栈以及链式栈
    Zookeeper原生API和Curator两种方式实现ZK分布式锁
    一个自己用的复制对象的工具类
    vue3按需引入 vite-plugin-style-import 2.0版本报错(解决办法)
    uni-app:通过ECharts实现数据可视化-如何引入项目
    SAP GUI 里的收藏夹事务码管理工具
    因子模型套利定价理论APT的应用
  • 原文地址:https://blog.csdn.net/HolyJohn/article/details/134434213