前言

Hello!大家好,又来到白哥的小学三年级课堂。今天白哥就来和大家探讨一下Java字符串使用中的一些方法细节。敲黑板,画重点,有人问,咦?白哥开始讲Java了,哈哈哈,没错,在疫情的那些百无聊赖的日子里,白哥,哈哈哈,拓展了Java“业务”,那么今天就请大家随白哥一起进入白哥的小学三年级课堂,来领略一下Java字符串的灵活与风骚。

一、String类

我们知道Java中char型只能存一个字符,不能存字符串。而字符串在Java语言中作为对象来处理,可以通过java.lang包中的String类来创建字符串对象。

import java.util.Scanner;

/**
 * @author Zenan
 */
public class zenanjava2 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String s=new String("/*字符串*/");//开始已经定义确定的字符串
        String s1=new String(in.next());//用户输入想要的字符串
        System.out.println("s = " + s);
        System.out.println("s1 = " + s1);
    }
}

二、字符串处理方法细节

到这里,我们就要进入今天的真正主题了,白哥将为大家带来十二种字符串处理的方法细节,让大家真正玩转Java字符串。话不多说,进入正题。

1. 测字符串长度

使用 Str.length()方法

String k;
        System.out.println("给字符串赋值(测长度):\n");
        k = in.next();
        int length_k = k.length();
        System.out.println("长度为:length_k = " + length_k);

运行结果

Java string 点位符用法_System

2. 搜索某个字符(串)在字符串中的位置

这里提供两个函数(方法),先介绍indexOf()方法,indexOf()可以找到要找的字符(串)最早出现的位置,而另外一个方法 lastIndexOf()可以找到要找的字符(串)最终一次出现的位置…听到这是不是用些,嗯~~~,不用担心,看代码!

/*使用IndexOf()方法*/
        System.out.println("输入要查找的字符串:\n");
        String indexOf_k = in.next();
        System.out.println("输入要查找的字符串:\n");
        String indexOf_k1 = in.next();
        int indexOf_b = indexOf_k.indexOf(indexOf_k1);
        System.out.println("要找的字符串(最先出现的)位置indexOf_b = " + indexOf_b);

        /*使用LastIndexOf()方法*/
        System.out.println("输入要查找的字符串:\n");
        String lastindexOf_k = in.next();
        System.out.println("输入要查找的字符串:\n");
        String lastindexOf_k1 = in.next();
        int lastindexOf_b = lastindexOf_k.lastIndexOf(lastindexOf_k1);
        System.out.println("要找的字符串(最先出现的)位置lastindexOf_b = " + lastindexOf_b);

运行结果

Java string 点位符用法_System_02

注意因为lastIndexOf()方法原理是从后向前检索,
故有.length=.lastIndexOf("");

例如

System.out.println("输入要查找的字符串:\n");
        String lastindexOf_k = in.next();
        int lastindexB = lastindexOf_k.length();
        int lastindexB1 = lastindexOf_k.lastIndexOf("");
        System.out.println(lastindexB);
        System.out.println(lastindexB1);

运行结果

Java string 点位符用法_Java_03

3、 定位某个位置是什么字符

使用 Str.charAt(int n)函数(方法)

System.out.println("输入要查找的字符串:\n");
        String charAt_k = in.next();
        System.out.println("输出第几个位置的字符:\n");
        int charAt_n = in.nextInt();
        char mychar = charAt_k.charAt(charAt_n);
        System.out.println("第" + charAt_n + "位置的字符为:" + "mychar = " + mychar);

运行结果

Java string 点位符用法_java_04


输出第几个位置时注意,位置起始为0,不为1

4、 获取子字符串

使用 Str.subString()函数(方法)

有两种使用方法,第一种 substring(int n),仅输入从某一位开始,获取从该位开始到字符串结束的所有字符

String substring_k = "hello world";
        String substring_k1 = substring_k.substring(3);
        System.out.println("子字符串为:substring_k1 = " + substring_k1);

第二种 substring(int n,int m),指截取从第n位开始,到第m位结束的子字符串

String substring_k2 = substring_k.substring(1, 6);
        System.out.println("子字符串为:substring_k2 = " + substring_k2);

运行结果

Java string 点位符用法_Java_05

5、去除空格(只能出去字符串【首尾】多余的空格)

使用函数(方法) Str.trim()

String trim_k = "   hello  world    ";
        System.out.println("原字符串:weitrim_k = " + trim_k);
        trim_k = trim_k.trim();
        System.out.println("去空格后字符串: trim_k = " + trim_k);

运行结果

Java string 点位符用法_System_06

6、替换字符

使用函数(方法) Str.replace(str,str)

String replace_k = "hello world";
        System.out.println("原字符串:replace_k = " + replace_k);
        replace_k = replace_k.replace("llo", "W");/*可以将字符(串)替换成字符(串)*/
        System.out.println("变换后的字符串  + replace_k =" + replace_k);
        replace_k = replace_k.replace("o", "q");
        System.out.println("变换后的字符串  + replace_k =" + replace_k);

运行结果

Java string 点位符用法_Java string 点位符用法_07

7、判断字符串的开始和结束字符是否正确

使用函数(方法) Str.startsWith()和Str.endsWith()判断开始和结束

String startsWith_k = "hello wourld";
        boolean startsWith_b = startsWith_k.startsWith("hello");
        boolean startWith_b1 = startsWith_k.startsWith("hllo");
        boolean startWith_b2 = startsWith_k.endsWith("l");
        System.out.println("是否以'hello'开始:startsWith_b = " + startsWith_b);
        System.out.println("是否以'hllo'开始:startWith_b1 = " + startWith_b1);
        System.out.println("是否以‘l’结束:startWith_b2 = " + startWith_b2);

运行结果

Java string 点位符用法_System_08

开始(结束)字符串正确则返回boolean型true,否则返回boolean型false。

8、比较字符串大小的的方法

由于这个问题涉及到循序渐进的过程,所以先来介绍判断两个字符(串)是否一样的函数(方法)。

使用Str.equals()和Str.equalsIgnoreCase()函数(方法)

Str.equals()可以真正的讨论到两字符串是否一样,
而Str.equalsIgnoreCase()则忽略大小写进行讨论

例Str.equals(str)

System.out.println("输入要比较的字符串:\n");
        String equals_k = in.next();
        System.out.println("输入第二个:\n");
        String equals_k1 = in.next();
        boolean equals_b = equals_k.equals(equals_k1);
        System.out.println("两个字符串是否一样:\nequals_b = " + equals_b);
        for (; true; ) {
            int i = 0;
            System.out.println("是否继续测试:(继续测试请按1,不测请按2):\n");
            i = in.nextInt();
            if (i == 1) {
                System.out.println("输入要比较的字符串:\n");
                equals_k = in.next();
                System.out.println("输入第二个:\n");
                equals_k1 = in.next();
                equals_b = equals_k.equals(equals_k1);
                System.out.println("两个字符串是否一样:\nequals_b = " + equals_b);
            } else {
                break;
            }
        }

白哥的代码写为循环形式是为了进行多次测试,核心只有前6行,有兴趣的小盆友可以测试一下白哥的代码,相信你会有别样的收获

运行结果

Java string 点位符用法_Java string 点位符用法_09

例Str.equalsIgnoreCase(str) 与Str.equals()一样,核心只有前6行,有兴趣的小盆友可以测试一下白哥的代码,相信你会有别样的收获

System.out.println("输入要比较的字符串:\n");
        String equals_k = in.next();
        System.out.println("输入第二个:\n");
        String equals_k1 = in.next();
        boolean equals_b = equals_k.equalsIgnoreCase(equals_k1);
        System.out.println("两个字符串是否一样:\nequals_b = " + equals_b);
        for (; true; ) {
            System.out.println("输入要比较的字符串:\n");
            equals_k = in.next();
            System.out.println("输入第二个:\n");
            equals_k1 = in.next();
            equals_b = equals_k.equalsIgnoreCase(equals_k1);
            System.out.println("两个字符串是否一样:\nequals_b = " + equals_b);
            System.out.println("是否继续测试:(继续测试请按1,不测请按2):\n");
            int i;
            i = in.nextInt();
            if (i == 2) {
                break;
            }
        }

运行结果

Java string 点位符用法_字符串_10

接下来讨论比较比较两个字符串大小的函数(方法) 使用 compareTo()函数 (方法)

Str.compareTo(str)返回值为int型,若为负,则前一字符串小于后一字符串 ,若为正,则前一字符串大于后一字符串,若为0,则相等。

for (; true; ) {
            System.out.println("输入要比较的字符串:\n");
            String compare_k = in.next();
            System.out.println("输入第二个:\n");
            String compare_k1 = in.next();
            int i = compare_k.compareTo(compare_k1);
            System.out.println("两个字符串是否一样:\n i = " + i);
            System.out.println("是否继续测试:(继续测试请按1,不测请按2):\n");
            int j;
            j = in.nextInt();
            if (j == 2) {
                break;
            }
        }

运行结果

Java string 点位符用法_Java string 点位符用法_11

9、大写变小写,小写变大写

使用 toLowerCase()将大写变小写,用toupperCase()将小写变大写

String toLowerCase_k = "abc   ABC";
        System.out.println("原字符串:toLowerCase_k = " + toLowerCase_k);
        toLowerCase_k = toLowerCase_k.toLowerCase();
        System.out.println("大写变小写后:toLowerCase_k = " + toLowerCase_k);

        System.out.println();
        String toupperCase_k = "ABC   abc";
        System.out.println("原字符串:toupperCase_k = " + toupperCase_k);
        toupperCase_k = toupperCase_k.toUpperCase();
        System.out.println("小写变大写后:toupperCase_k = " + toupperCase_k);

运行结果

Java string 点位符用法_java_12

10、 分割字符串

使用Str.split("\分隔符",int n)函数(方法)

注意因为没有指定的分隔符故使用字符串中的字符作为分隔符,可以指定多个分隔符用|连接,如 “,|.”指用‘,’和‘.’ 分隔字符串。

/*先定义一个字符串*/
 String split_k = "abc ABC hello.would";

Str.split()有两种用法,一种Split("\字符"),指见到这个字符就进行分隔,另一种是Split("\字符",int n),指见到指见到这个字符就进行分隔,但只将字符串分隔为n段,分隔成n段后则见到这个字符不进行分隔。

由于分隔后字符串被分隔为多个字符串,则用String[] split_k这个字符串数组存每一个字符串。

System.out.println("原字符串为:split_k = " + split_k);
        System.out.println("用空格分隔后:");
        String[] split_k1 = split_k.split("\\ ");
        for (String a : split_k1) {
            System.out.println("[" + a + "]");
        }


        System.out.println("用空格分隔为两段:");
        split_k1 = split_k.split("\\ ", 2);
        for (String a : split_k1) {
            System.out.println("[" + a + "]");
        }


        System.out.println("用‘,’和空格一起分隔:");
        split_k1 = split_k.split("\\.| ");
        for (String a : split_k1
        ) {
            System.out.println("[" + a + "]");
        }


        System.out.println("用‘,’和空格一起分隔为两段:");
        split_k1 = split_k.split("\\.| ", 2);
        for (String a : split_k1
        ) {
            System.out.println("[" + a + "]");
        }


        System.out.println("用‘,’和空格一起分隔为三段:");
        split_k1 = split_k.split("\\.| ", 3);
        for (String a : split_k1
        ) {
            System.out.println("[" + a + "]");
        }


        System.out.println("用‘,’和空格一起分隔为四段:");
        split_k1 = split_k.split("\\.| ", 4);
        for (String a : split_k1
        ) {
            System.out.println("[" + a + "]");
        }


        System.out.println("用‘,’和空格一起分隔为五段:");
        **/*因为最多分隔4段,故分为5段与分为4段,输出结果一样*/**
        split_k1 = split_k.split("\\.| ", 5);
        for (String a : split_k1
        ) {
            System.out.println("[" + a + "]");
        }

这个代码白哥讨论了七种情况,几乎涵盖了Str.split()的所有用法,同学们仔细品,先想出每种情况的答案,然后看接下来的运行结果

运行结果

Java string 点位符用法_字符串_13

好了,到这里Java字符串的基本函数(方法),白哥已经为大家介绍完了,白哥呢也是看到好多小伙伴意犹未尽呀!那接下来就是高级一点的字符串方法啦!一起来学习吧!

11. 格式化字符串

使用 Str.format()函数(方法)

格式为 String 标识符=string.format("%内容的格式",要转换为string格式的内容),即可将内容转变为string格式

我们先以日期和时间的格式化为例,要进行日期,时间的格式化,Java中给出了日期和时间的对象Date,所以我们需要先创建一个Date对象,再引用它。

Date date = new Date();       //创建一个Date(时间)对象

输出当前的日期(年-月-日)

Date date = new Date();                         //创建一个Date(时间)对象
        String year = String.format("%tY", date);        //%tY 是Date对象中年份的内容的格式
        String mouth = String.format("%tm", date);       //%tm 是Date对象中月份的内容的格式
        String day = String.format("%td", date);         //%td 是Date对象中日的内容的格式
        String all = String.format("%tc", date);         //%tc 是Date对象中所有日期和时间的内容的格式
        System.out.println("year = " + year);
        System.out.println("mouth = " + mouth);
        System.out.println("day = " + day);
        System.out.println("all = " + all);

运行结果(这是白哥此时的时间,你运行的不一定一样哦!!)

Java string 点位符用法_System_14

输出当前的时间(小时:分钟:秒)

String hour = String.format("%tH", date);         //%tH 是Date对象中小时的内容的格式
        String minute = String.format("%tM", date);       //%tM 是Date对象中分钟的内容的格式
        String second = String.format("%tS", date);       //%tS 是Date对象中秒的内容的格式
        System.out.println("hour = " + hour);
        System.out.println("minute = " + minute);
        System.out.println("second = " + second);
        String all1 = String.format("%tF", date);            //%tF 以年-月-日的格式输出   2020-4-12
        String all2 = String.format("%tT", date);            //%tT 以时:分:秒格式输出    22:15:05
        String all3 = String.format("%tr", date);            //%tr 以12小时制输出    10:15:05   下午
        System.out.println("all1 = " + all1);
        System.out.println("all2 = " + all2);
        System.out.println("all3 = " + all3);

运行结果(这是白哥此时的时间,你运行的不一定一样哦!!)

Java string 点位符用法_System_15

讨论完日期时间之后,我们讨论其他格式如整形,实型,字符型,注意他们的格式符与C语言一致分别为%d,%f,%s。

String format_k = String.format("%d", 200 / 2);        //因为200/2为整形数据,所以格式符%d要与其匹配
        String format_k1 = String.format("%b", 3 > 5);         //同理于布尔类型匹配
        System.out.println("format_k = " + format_k);
        System.out.println("format_k1 = " + format_k1);

12、字符串生成器

首先定义字符串生成器

StringBuilder builder = new StringBuilder("");

我们知道定义好的字符串如果要加入新的内容可以用"+"来连接,可是如果要连接的数目非常多,则会导致时间过长,系统开销大,例如

String build_k = "";
        long starTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            build_k = build_k + i;
        }
        long endTime = System.currentTimeMillis();
        long time = endTime - starTime;
        System.out.println("string消耗时间:time = " + time);
        starTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            builder.append(i);
        }
        endTime = System.currentTimeMillis();
        time = endTime - starTime;
        System.out.println("Builder消耗时间: time = " + time);

运行结果

Java string 点位符用法_System_16

由图就可以看出,往String类型中添加多个信息时,时间空间消耗巨大,而用StringBuiler时则会快很多,意思是当我们需要对字符串不断的增加信息时我们需要使用StringBuilder去节约空间时间,所以我们很有必要学习字符串生成器

白哥在这里介绍3个处理字符串生成器的函数(方法)

1. StringBuilder.append(str) 对字符串生成器尾部增加信息
2. StringBuilder. insert(int n,str) 对某一位置处增加信息
3. StringBuilder.delete(int n,int m) 删除n到m-1处的信息
4. StringBuilder. tostring() 最后输出stringBuilder的结果时用tostring函数(方法)

StringBuilder builder1 = new StringBuilder("");
        builder1.append("hello");      /*用append做添加*/
        System.out.println("bulider1 = " + builder1);
        builder1.insert(5, in.next()); /*在某一位置插入数据时,不能在超越原来字符串长度的位置上插入,即原字符串为hello,
        则插入时位置不能超过5,否则报错*/
        System.out.println("bulider1 = " + builder1);
        builder1.delete(3, 6);         /*用dalete做添加*/
        System.out.println("bulider1 = " + builder1);   //两者一样都可以
        System.out.println("builder1.toString = " + builder1.toString());

运行结果

Java string 点位符用法_Java string 点位符用法_17

注意用字符串生成器输出时,System.out.println("bulider1 = " + builder1); 这样直接输出和用 System.out.println("builder1.toString = " + builder1.toString());这样使用builder1.toString()函数(方法)输出,结果是一样的。

三、总结

好了,到这里,朋友们,Java字符串应该已经对你没有一点阻碍了,下面就让白哥给你一波一锅汇,将金典浓缩起来,也许他就能成为考试时候的小抄。。。。嗯~~~~,好像是的。

*   str.length()                 str为待测字符串, 返回int值
     *   str.indexOf(str1)            str为待测字符串,str1为参数字符串(要搜索的字符串),返回int值
     *   str.lastIndexOf(str1)        str为待测字符串,str1为参数字符串(要搜索的字符串),返回int值
     *   str.charAT(int n)            str为待测字符串,n为参数(定位字符串中的位置),返回char值
     *   str.substring(int n)         str为待测字符串,n为参数(定位字符串中的位置),返回string值
     *   str.substring(int n,int m)   str为待测字符串,n与m为参数(定位字符串中的位置),返回string值
     *   str.trim()                   str为待测字符串,返回string值
     *   str.replace(str1,str2)       str为待测字符串,将str中的str1替换为str2,返回string值
     *   str.startsWith(str1)         str为待测字符串,检验str是否以str1开始,返回boolean值
     *   str.endsWith(str1)           str为待测字符串,检验str是否以str1结束,返回boolean值
     *   str.equals(str1)             str为待测字符串,检验str是否与str1相等,返回boolean值
     *   str.equalsIgnoreCase(str1)   str为待测字符串,检验str是否与str1相等,返回boolean值
     *   str.compareTo(str1)          str为待测字符串,检验str与str1大小,返回int值
     *   str.tolowerCase()            str为待测字符串,返回string值
     *   str.toupperCase()            str为待测字符串,返回string值
     *   str.split("\\字符",int n)    str为待测字符串,以“字符”为分隔符,分隔为n段,返回string[]值
     *   string.format("%内容的格式",要转换为string格式的内容)   返回string值
     *   builder.append("str")        builder为待测字符串生成器,将str加入(添加)到builder中,直接记录在builder中,无返回
     *   builder.insert(int n,str)    builder为待测字符串生成器,将str加入(添加)到builder中的第n位置处,直接记录在builder中,无返回
     *   builder.delete(int n,int m)  builder为待测字符串生成器,将字符串生成器builder中n到m-1位置删除,直接记录在builder中,无返回

哈哈哈哈,有没有感觉要升华了,没有关系,多巩固才能让字符串的应用更加灵活。白哥呢,也会不定期的冒出来,为你传授一下人生哲学。好啦,欢迎来到白哥的小学三年级课堂,这期内容就是这样,期待下期还有你的身影。

参考资料

《Java从入门到精通》 明日科技 著 清华大学出版社