Java基础 | 字符串(上)

简介: 字符串

字符串

(一)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;
    }
}
目录
相关文章
|
1月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
46 1
|
14天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2天前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
|
9天前
|
Java
Java实现:将带时区的时间字符串转换为LocalDateTime对象
通过上述方法,你可以将带时区的时间字符串准确地转换为 `LocalDateTime`对象,这对于处理不需要时区信息的日期和时间场景非常有用。
174 4
|
19天前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
|
24天前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
|
1月前
|
存储 Java
如何在 Java 中打印字符串数组列表
【8月更文挑战第23天】
28 2
|
1月前
|
存储 Java API
|
28天前
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
42 0