Java SE 学习笔记(六)—— 常用API(1)

1 API概述


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

Java中的API:指的就是 JDK 中提供的各种功能的 Java 类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。

😋 API 的使用步骤:

1️⃣ 导包

💕 格式:

import 包名.类名;

❗️ 注意:

  • 只有 java.lang 包下的内容不需要导包,其他的包都需要 import 语句

2️⃣ 创建对象

使用该类的构造方法,创建一个该类的对象。

💕 格式:

数据类型 变量名 = new 数据类型(参数列表);

3️⃣ 调用方法

调用该类的成员方法,完成指定功能。

💕 格式:

变量名.方法名();

2 Scanner类


Scanner类是一个可以解析基本类型和字符串的简单文本扫描器。

public static void main(String[] args) {
        // 创建Scanner对象
        Scanner sc  = new Scanner(System.in);

        // 调用方法
        System.out.println("请输入字符串1:");
        String s1 = sc.nextLine();
        System.out.println(s1);

        System.out.println("请输入字符串2:");
        String s2 = sc.next();
        System.out.println(s2);

        System.out.println("请输入整数:");
        int i = sc.nextInt();
        System.out.println(i);
    }

❗️ 注意:

  • System.in系统输入指的是通过键盘录入数据。
  • 获取键盘输入的一个int数字:int num = sc.nextInt();
  • 获取键盘输入的一个字符串:
    • String str = sc.next();遇到了空格, 就不再录入数据了 , 结束标记:空格,tab键
    • String str = sc.nextLine();,可以将数据完整的接收过来 , 结束标记: 回车换行符
  • nextIntnextLine方法都是以回车为结束符,二者配合使用的时候, nextLine方法就没有键盘录入的机会了。
    • 建议: 今后键盘录入数据的时候, 如果是字符串和整数一起接受, 建议使用next方法接收字符串,或者将 nextLine方法放在前面

3 Random类


此类的实例用于生成伪随机数

Random r = new Random(); 
int i = r.nextInt();

❗️注意:

  • 获取一个随机的int数字(范围是int所有范围,有正负两种):int num = r.nextInt()
  • 获取一个随机的int数字(参数代表了范围,左闭右开区间):int num = r.nextInt(3),实际上代表的含义是:[0,3),也就是0~2
  • 产生1-10之间的随机数:int i = sc.nextInt(10)+1;

🙋举个栗子:猜数字

程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?当猜错的时候根据不同情况给出相应的提示

  • 如果猜的数字比真实数字大,提示你猜的数据大了
  • 如果猜的数字比真实数字小,提示你猜的数据小了
  • 如果猜的数字与真实数字相等,提示恭喜你猜中了
import java.util.Scanner;
import java.util.Random;

public class Test {
	public static void main(String[] args){
		// 1. 准备Random和Scanner对象, 分别用于产生随机数和键盘录入
		Random r = new Random();
		Scanner sc = new Scanner(System.in);
		// 2. 使用Random产生一个1-100之间的数, 作为要猜的数
		int randomNum = r.nextInt(100) + 1;
		
		// 5. 以上内容需要多次进行, 但无法预估用户输入几次可以猜测正确, 使用while(true)死循环包裹
		while(true){
			// 3. 键盘录入用户猜的的数据
			System.out.println("请输入您猜的数据:");
			int num = sc.nextInt();
			// 4. 使用录入的数据(用户猜的数据)和随机数(要猜的数据)进行比较, 并给出提示
			if(num > randomNum){
				System.out.println("猜大了");
			}else if(num < randomNum){
				System.out.println("猜小了");
			}else{
				// 6. 猜对之后, break结束.
				System.out.println("恭喜,猜中了");
				break; // 加了break,死循环后的语句可能可以执行到
			}
		}
		
		System.out.println("感谢您的使用"); // 死循环中,不加break该语句会报错
	}
}

4 String类

4.1 String类概述


java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。

API当中说:Java 程序中的所有字符串字面值(如"abc")都作为此类的实例实现。
其实就是说:程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是)

😎 字符串的特点:

  • Java程序当中所有的双引号字符串,都是String类的对象
  • 字符串是常量,它们的值在创建后不可以被更改
  • 正是因为字符串不可改变,所以字符串是可以 共享 使用的(字符串在字符串常量池中存储,字符串常量池是存储在 堆内存 中的)
  • 字符串效果上相当于是char[]字符数组,但是底层原理是被final 修饰的 byte[]字节数组

❓对于“ 字符串是常量,它们的值在创建后不可以被更改”的疑问?

  • String对象是不可改变的,修改字符串的值实际上是在重新创建实例(对象)并赋值。
  • String变量每次的修改其实都是产生并指向了新的字符串对象,原来的字符串对象是没有改变的
public static void main(String[] args) {
	String str = "微微"; //“微微”这是一个字符串对象
	System.out.println(str);
	
	// 这一步是让str这个字符串类型的变量,记录了一个新的对象
	str = "啦啦啦"; // “啦啦啦”这又是一个新的字符串对象
	System.out.println(str);
}

4.2 String类的构造方法


在这里插入图片描述

创建字符串的对象(创建对象的过程就是调用构造方法)

public static void main(String[] args) {
    // 使用空参构造【几乎不用】
    String str1 = new String(); // 小括号留空,说明字符串什么内容都没有。
    System.out.println("第1个字符串:" + str1);

	// 根据传入的字符串内容创建字符串【几乎不用】
	String str2 = new String("hello"); // 小括号留空,说明字符串什么内容都没有。
    System.out.println("第2个字符串:" + str2);

    // 根据字符数组创建字符串
    char[] charArray = { 'A', 'B', 'C' };
    String str3 = new String(charArray);
    System.out.println("第3个字符串:" + str3);

    // 根据字节数组创建字符串
    byte[] byteArray = { 97, 98, 99 };
    String str4 = new String(byteArray);
    System.out.println("第4个字符串:" + str4);

    // 直接创建【推荐】
    String str5 = "Hello";
    System.out.println("第5个字符串:" + str5);
}

❗️注意:

  • String 这个类比较特殊,打印其对象名的时候,不会出现内存地址,而是该对象所记录的真实内容

4.3 创建字符串对象的区别(常见面试题)


🙇 问题:构造方法可以创建对象,双引号也可以创建字符串对象,二者有什么区别?

❗️注意:== 号作比较

  • 对于基本类型来说,== 是进行【数值】的比较。
  • 对于引用类型来说,== 是进行【地址值】的比较。String 是引用类型。

1️⃣ 双引号创建字符串对象

""方式直接给出字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会创建一个String对象并在 字符串常量池 中维护(相同的内容只会存储一份),字符串常量池从JDK7开始,从方法区挪到了堆内存中。

当使用""创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在:

  • 不存在:创建
  • 存在:不会重新创建,而是直接复用
public static void main(String[] args) {
	 String s1 = "abc"; // 字符串常量池里面没有,创建
	 String s2 = "abc"; // 字符串常量池里面存在,直接复用
	 // s1和s2指向了同一块内存地址
	 System.out.println(s1 == s2); // true
}

2️⃣ 通过构造方法创建字符串对象,在 堆内存 中存储,每一次 new 都会申请新的内存空间,虽然内容相同,但是地址不同

public static void main(String[] args) {
	char[] charArray = {'a', 'b', 'c'};
	String s1 = new String(charArray);
	String s2 = new String(charArray);
	System.out.println(s1 == s2); // false
}

🔥 结论:

  • 双引号创建的字符串对象,在字符串常量池中存储,而通过构造方法创建的字符串对象,在堆内存中存储。

3️⃣ 其他情况

(1)面试题1

public static void main(String[] args) {
	String s1 = "abc";
	String s2 = new String("abc");
	System.out.println(s1 == s2); // false
}

s1 的内存地址在常量池中,s2 的内存地址在堆内存中,二者地址指向不一样。

❗️注意:

  • String s2 = new String("abc");,实际上是创建了两个对象(一个是new在堆内存中创建的,一个是双引号在字符串常量池中创建的),比较浪费内存

(2)面试题2

public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "ab";
        String s3 = s2+"c"; // 一个变量与字符串拼接
        System.out.println(s1==s3); // false
    }

当字符串之间使用 + 号拼接时,系统底层会在堆内存自动创建一个StringBuilder 对象,然后再调用其 append方法完成拼接,最后再调用 toString 方法转为 String 类型。

在这里插入图片描述

(3)面试题3

public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "a"+"b"+"c"; // 字符串常量拼接 
        System.out.println(s1 == s2); // true
    }

Java存在 编译优化机制,在编译的时候,就会将 “a”+“b”+“c” 拼接为 “abc”

4.4 String类的常用方法


1️⃣ 判断功能的方法

== 是进行对象的地址值比较,如果确实需要字符串的 内容 比较,可以使用两个方法:

  • public boolean equals (Object anObject) :将此字符串与指定对象进行比较。
  • public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略大小写。
  • public boolean contains(String str) :此字符串是否包含指定字符串
  • public boolean startswith(String str) :此字符串是否以指定字符串开头
public static void main(String[] args) {
	String s1 = "abc";
	String s2 = "ABC";
	String s3 = "abc";
	
	// equals : 比较字符串内容, 区分大小写
	System.out.println(s1.equals(s2)); // false
	System.out.println(s1.equals(s3)); // true
	
	// equalsIgnoreCase : 比较字符串内容, 忽略大小写
	System.out.println(s1.equalsIgnoreCase(s2)); // true
}

❗️注意:

  • equals方法具有对称性,也就是a.equals(b)b.equals(a)效果一样。
  • 如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
    • 推荐:"abc".equals(str)
    • 不推荐:str.equals("abc")

🙋举个栗子:用户登录

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

public class Test1 {
    /*
        思路:
        1. 已知用户名和密码,定义两个字符串表示即可
        2. 键盘录入要登录的用户名和密码,用 Scanner 实现
        3. 拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。
            字符串的内容比较,用equals() 方法实现
        4. 用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循环

     */
    public static void main(String[] args) {
        // 1. 已知用户名和密码,定义两个字符串表示即可
        String username = "admin";
        String password = "123456";
        // 2. 键盘录入要登录的用户名和密码,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        // 4. 用循环实现多次机会,这里的次数明确,采用for循环实现
        for(int i = 1; i <= 3; i++){
            System.out.println("请输入用户名:");
            String scUsername = sc.nextLine();
            System.out.println("请输入密码:");
            String scPassword = sc.nextLine();
            // 3. 拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。
            if(username.equals(scUsername) && password.equals(scPassword)){
                System.out.println("登录成功");
                break;
            }else{
                if(i == 3){
                    System.out.println("您的登录次数已达到今日上限, 请明天再来");
                }else{
                    System.out.println("登录失败,您还剩余" + (3-i) +"次机会");
                }

            }
        }

    }
}

2️⃣ 转换功能的方法

  • public char[] toCharArray () :将此字符串转换为新的字符数组。
  • public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
  • public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使用replacement字符串替换。(CharSequence意思就是说可以接受字符串类型)
public class Demo {
    public static void main(String[] args) {
        // 转换成为字符数组
        char[] chars = "Hello".toCharArray();
        System.out.println(chars[0]); // H
        System.out.println(chars.length); // 5
        System.out.println("==============");

        // 转换成为字节数组
        byte[] bytes = "abc".getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }
        System.out.println("==============");

        // 字符串的内容替换
        String str1 = "How do you do?";
        String str2 = str1.replace("o", "*");
        System.out.println(str1); // How do you do?
        System.out.println(str2); // H*w d* y*u d*?
        System.out.println("==============");
    }
}

🙋举个栗子:统计字符个数

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

public static void main(String[] args) {
        // 1. 键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        // 2. 要统计三种类型的字符个数,需定义三个统计变量,初始值都为0
        int bigCount = 0;
        int smallCount = 0;
        int numCount = 0;
        // 3. 遍历字符串,得到每一个字符
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            // 4. 判断该字符属于哪种类型,然后对应类型的统计变量+1
            if (c >= 'A' && c <= 'Z') {
                bigCount++;
            } else if (c >= 'a' && c <= 'z') {
                smallCount++;
            } else if (c >= '0' && c <= '9') {
                numCount++;
            }
        }

        // 5. 输出三种类型的字符个数
        System.out.println("大写字母字符:" + bigCount);
        System.out.println("小写字母字符:" + smallCount);
        System.out.println("数字字符:" + numCount);
    }

🙋🙋再举个栗子:字符串替换

键盘录入一个 字符串,如果字符串中包含(TMD),则使用***替换

public static void main(String[] args) {
        // 1. 键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        // 2. 替换敏感词
        String result = s.replace("TMD","***");
        // 3. 输出结果
        System.out.println(result);
    }

3️⃣ 获取功能的方法

  • public int length () :返回此字符串的长度。
  • public String concat (String str) :将指定的字符串连接到该字符串的末尾。
  • public char charAt (int index) :返回指定索引处的 char值。
  • public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
  • public String substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
  • public String substring (int beginIndex, int endIndex) :返回一个子字符串(前闭后开),从beginIndexendIndex截取字符串。含beginIndex,不含endIndex。截取完成后要找一个新的变量接收,因为字符串不可变。

❗️注意:

  • 数组的长度:数组名.length
  • 字符串的长度:字符串对象.length()

🙋举个栗子:遍历字符串

第一种方法

public static void main(String[] args) {
    //  1. 键盘录入一个字符串,用 Scanner 实现
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入:");
    String s = sc.nextLine();
    // 2. 遍历字符串,首先要能够获取到字符串中的每一个字符
    for(int i = 0; i < s.length(); i++){
        // i : 字符串的每一个索引
        char c = s.charAt(i);
        System.out.println(c);
    }
}

第二种方法

public static void main(String[] args) {
    //  1. 键盘录入一个字符串,用 Scanner 实现
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入:");
    String s = sc.nextLine();
    // 2. 将字符串拆分成字符数组
    char[] chars = s.toCharArray()
    for(int i = 0; i < chars.length; i++){
        // 3. 遍历字符数组
        System.out.println(chars[i]);
    }
}

🙋🙋 再举个栗子:字符串截取

以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽,最终效果为:156****1234

public static void main(String[] args) {
        // 1. 键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入手机号:");
        String telString = sc.nextLine();
        // 2. 截取字符串前三位
        String start = telString.substring(0,3);
        // 3. 截取字符串后四位
        String end = telString.substring(7);
        // 4. 将截取后的两个字符串,中间加上****进行拼接,输出结果
        System.out.println(start + "****" + end);
    }

4️⃣ 分割功能的方法

public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组。

❗️ 注意:

  • split 方法的参数其实是一个正则表达式,如果按照英文句点 “.” 进行切分,必须写"\\."(两个反斜杠)

🙋举个栗子:切割字符串

以字符串的形式从键盘录入学生信息,例如:“张三 , 23”,从该字符串中切割出有效数据,封装为Student学生对象

Student类

public class Student {
    private String name;
    private String age;

    public Student() {
    }

    public Student(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

TestStudent类

import java.util.Scanner;

public class TestStudent {
    public static void main(String[] args) {
        // 2. 键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生信息:");
        String stuInfo = sc.nextLine();
        // stuInfo = "张三,23";
        // 3. 根据逗号切割字符串,得到(张三)(23)
        String[] sArr = stuInfo.split(",");

        // System.out.println(sArr[0]);
        // System.out.println(sArr[1]);

        // 4. 从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象
        Student stu = new Student(sArr[0],sArr[1]);

        // 5. 调用对象getXxx方法,取出数据并打印。
        System.out.println(stu.getName() + "..." + stu.getAge());
    }
}

5 StringBuilder类

5.1 StringBuilder类概述


在这里插入图片描述

StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

作用:提高字符串的操作效率,如拼接、修改等

🙋举个栗子:分别使用StringBuilderString将1到100000的数字进行拼接

public class demo1 {

    public static void main(String[] args) {

        stringBuilderMethod();
        stringMethod();
    }

    private static void stringBuilderMethod() {
        long start = System.currentTimeMillis();

        StringBuilder sb = new StringBuilder();
        for(int i = 1; i <= 100000; i++){
            sb.append(i);
        }
//        System.out.println(sb);

        long end = System.currentTimeMillis();
        System.out.println("StringBuilder耗时:"+(end - start));
    }

    private static void stringMethod() {
        // 获取1970年1月1日 0时0分0秒 到当前时间所经历过的毫秒值
        long start = System.currentTimeMillis();

        String s = "";
        for(int i = 1; i <= 100000; i++){
            s += i;
        }
//        System.out.println(s);

        long end = System.currentTimeMillis();
        System.out.println("String耗时:"+(end - start));
    }
}

💘 结果输出:

StringBuilder耗时:11
String耗时:15453

由此可见,StringBuilder的效率比String高出很多

🌈 StringBuilder提高效率原理图

1️⃣ String的拼接

在这里插入图片描述

JDK1.7 及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在堆内存中开辟了一块区域存放字符串常量池。

对于String来说,有1个“+”,堆内存中就会有2个对象(StringBuilder对象和String对象)

2️⃣ StringBuilder 的拼接

在这里插入图片描述

无论进行多少次拼接,堆内存中始终只有一个StringBuilder对象

5.2 StringBuilder类的构造方法


在这里插入图片描述

public class Demo {
    public static void main(String[] args) {
        //空参数构造方法
        StringBuilder bu1 = new StringBuilder();
        System.out.println(bu1);// 

        //带字符串的构造方法
        StringBuilder bu2 = new StringBuilder("abc");
        System.out.println(bu2);// abc
    }
}

❗️ 注意:

  • 同String类一样,StringBuilder 类打印对象名时不是内存地址,而是具体的内容

5.3 StringBuilder的常用方法


1️⃣ public StringBuilder append(...) :添加任意类型数据的字符串形式,并返回当前对象自身

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        // 方法一

//        sb.append("红色");
//        System.out.println(sb); // 红色
//        sb.append("蓝色");
//        System.out.println(sb); // 红色蓝色
//        sb.append("绿色");
//        System.out.println(sb); // 红色蓝色绿色

         // 方法二

//        StringBuilder sb2 = sb.append("红色");
//        StringBuilder sb3 = sb2.append("蓝色");
//        sb3.append("绿色");
//        System.out.println(sb3); // 红色蓝色绿色
//
//        System.out.println(sb==sb2); // true
//        System.out.println(sb2==sb2); // true

        // 方法三
        // 链式编程: 如果一个方法返回的是对象类型, 对象就可以继续向下调用方法.
        sb.append("红色").append("蓝色").append("绿色");
        System.out.println(sb); // 红色蓝色绿色
    }

案例:字符串拼接

定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回调用该方法,并在控制台输出结果。

例如,数组为int[] arr = {1,2,3};,执行方法后的输出结果为:[1, 2, 3]

public class Test {
    public static void main(String[] args) {
        // 1. 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        int[] arr = {1,2,3};
        // 4. 调用方法,用一个变量接收结果
        String s = arrayToString(arr);
        // 5. 输出结果
        System.out.println(s); // [1,2,3]
    }

    // 2. 定义一个方法,返回值类型 String,参数列表 int[] arr
    public static String arrayToString(int[] arr){
        // 3. 在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        StringBuilder sb = new StringBuilder("[");

        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length -1){
                sb.append(arr[i]).append("]");
            }else{
                sb.append(arr[i]).append(", ");
            }
        }
        return sb.toString();
    }
}

2️⃣ public StringBuilder reverse():返回相反的字符序列

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("我是微微啊");
        System.out.println("反转前:"+sb); // 反转前:我是微微啊
        sb.reverse();
        System.out.println("反转后:"+sb); // 反转后:啊微微是我
    }

3️⃣ public String length():返回长度(字符个数)

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("我是微微啊");
        System.out.println("sb中字符的个数"+sb.length()); // sb中字符的个数5
    }

4️⃣ public String toString() :将当前StringBuilder对象转换为String对象。

StringBuilder只是一种提高效率的手段,最终的目的还是要恢复成 String类型

StringBuilderString可以相互转换:

  • String —> StringBuilder:可以使用 StringBuilder 的构造方法
    • StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。
  • StringBuilder —> String:可以使用StringBuilder中的toString方法
    • public String toString():将当前StringBuilder对象转换为String对象。
public static void main(String[] args) {
        //String->StringBuilder
        String str = "hello";
        System.out.println("str:"+str);// str:hello
        StringBuilder bu = new StringBuilder(str);
        //往StringBuilder中添加数据
        bu.append("world");
        System.out.println("bu:"+bu);// str:helloworld

        //StringBuilder->String
        String s = bu.toString();
        System.out.println("s:"+s);// s:helloworld
    }

案例:判断对称字符串

public static void main(String[] args) {
        //  1. 键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入对称字符串:");
        String s = sc.nextLine();
        // 2. 将键盘录入的字符串反转
        // 将字符串封装为StringBuilder对象, 目的是为了掉用其反转的方法
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        String reverseStr = sb.toString();
        // s : String
        // sb : StringBuilder
        // 3. 使用反转后的字符串,和原字符串进行比对
        if(s.equals(reverseStr)){
            System.out.println("是对称字符串");
        }else{
            System.out.println("不是对称字符串");
        }
    }

下一篇:Java SE 学习笔记(六)—— 常用API(2)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值