9.4字符串操作

String类中包含了很多方法,允许程序员对字符串进行操作来满足实际编程中的需要。本节将讲解几种常见的字符串操作。

9.4.1获取子字符串

通过String类的substring()方法可对字符串进行截取。substring()方法被两种不同的重载形式,来满足不同的需要。这些形式的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。

1.substring(int beginlndex)

该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串。语法如下:

str.substring(int beginlndex)

其中,beginIndex指定从某一索引处开始截取字符串。截取字符串,代码如下:

String str = "Hello World"; //定义字符串str

String substr = str.substring(3); //获取字符串,此时substr值为lo World
误区警示:

在字符串中,空格占用一个索引位置。

2.substring(int beginlndex,int endlndex)

该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串。语法如下:

substring(int beginlndex,int endlndex)

☑ beginIndex:开始截取子字符串的索引位置。

☑ endIndex:子字符串在整个字符串中的结束位置。

【例1】《将进酒》的作者是哪位诗人?

在项目中创建Subs类,在主方法中创建String对象,实现使用substring()方法对字符串进行截取,并将截取后形成的新串输出。实例代码如下:

java 复制代码
public class Subs {    //创建类
    public static void main(String args[]){    //主方法
        String str = "《将进酒》:李白(唐)";    //定义的字符串
        String substr = str.substring(6,8);    //对字符串进行截取
        System.out.println("《将进酒》的作者是"+substr);    //输出截取后的字符串
    }
}

运行结果如下:

《将进酒》的作者是李白

9.4.2去除空格

trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法如下:

str.trim()

其中,str为任意字符串对象。

【例2】去掉字符串首、尾的空格

在项目中创建Blak类,在主方法中创建String对象,在控制台上输出字符串原来的长度和去掉首、尾空格后的长度。实例代码如下:

java 复制代码
public class Blak{    //创建类
    public static void main(String args[]){    //主方法
        String str = "Java class";    //定义字符串str
        System.out.println("字符串原来的长度:"+str.length());    //将str原来的长度输出
        //将str去掉前导和尾部的空格后的长度输出
        System.out.println("去掉空格后的长度:"+str.trim().length());
    }
}

运行结果如下:

字符串原来的长度:10

去掉空格后的长度:9

9.4.3字符串替换

replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。语法如下:

str.replace(CharSequence target,CharSequence replacement)

☑ target:要替换的字符或字符串。

☑ replacement:用于替换原来字符串的内容。

replace()方法返回的结果是一个新的字符串。如果字符或字符串oldChar没有出现在该对象表达式中的字符串序列中,则将原字符串返回。

【例3】将单词中的字母a替换为字母A

在项目中创建NewStr类,在主方法中创建String型变量,将该变量中的字母a替换成A,并将替换后的字符串输出。实例代码如下:

java 复制代码
public class NewStr{    //创建类
    public static void main(String args[]){    //主方法
        String str = "address";    //定义字符串str
        String newstr = str.replace("a","A");    //将str中"a"替换成"A"并返回新字符串newstr
        System.out.println(newstr);    //将字符串newstr输出
    }
}

运行结果如下:

Address
说明:

如果要替换的字符oldChar在字符串中重复出现多次,replace()方法会将所有oldChar全部替换成newChar。例如;

String str = "java projec";

String newstr = str replace("j","J");

此时,newstr的值为Java proJect。

需要注意的是,要替换的字符oldChar的大小写要与原字符串中字符的大小写保持一致,否则不能成功地替换。例如,上面的实例如果写成如下语句,则不能成功替换:

String str = "java project";

String newstr = str.replace("P","t");

9.4.4判断字符串的开始与结尾

startsWith()方法与cndsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。

1.startsWith()方法

该方法用于判断当前字符串对象的前缀是否为参数指定的字符串。语法如下:

str.startsWith(String prefix)

其中,prefix是指作为前缀的字符串。

2.endsWith()方法

该方法用于判断当前字符串是否为以给定的子字符串结束。语法如下:

str.endsWith(String suffix)

其中,suffix是指作为后缀的字符串。

【例4】判断字符串是否以指定的内容开始或结束

在项目中创建StartOrEnd类,在主方法中创建两个String型变量,它们的值分别为"22045612"和"21304578",先判断"22045612"是否是以"22"开始的,再判断"21304578"是否是以"78"结束的。实例代码如下:

java 复制代码
public class StartOrEnd{    //创建类
    public static void main(String args[]){    //主方法
        String num1 = "22045612";    //定义字符串num1
        String num2 = "21304578";    //定义字符串num2
        boolean b1 = num1.startsWith("22");    //判断字符串num1是否以'22'开头
        boolean b2 = num2.endsWith("78");    //判断字符串num2是否以78'结束    
        System.out.println("字符串num1是以'22'开始的吗?"+b1);
        System.out.println("字符串num2是以78结束的吗?"+b2);    //输出信息
    }
}

运行结果如下:

字符串num1是以'22'开始的吗?true

字符串num2是以78结束的吗?true

9.4.5判断字符串是否相等

对字符串对象进行比较不能简单地使用比较运算符"==",因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。使用比较运算符比较两个字符串,代码如下:

String tom = new String("I am a student");

String jerry = new String("I am a student");

boolean b = (tom == jerry);

此时,布尔型变量b的值为false,因为字符串是对象,tom、jerry是引用。

因此,要比较两个字符串内容是否相等,应使用equals()方法和equalslgnoreCase()方法。

1.equals()方法

如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。否则,返回false。语法如下:

str.equals(String otherstr)

其中,str、otherstr是要比较的两个字符串对象。

2.equalslgnoreCase()方法

使用equals()方法对字符串进行比较时是区分大小写的,而使用equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。语法如下:

str.equalslgnoreCase(String otherstr)

其中,str、otherstr是要比较的两个字符串对象。

通过下面的例子可以看出equals()方法和equalsIgnoreCase()方法的区别。

【例5】判断"abc"与"ABC"是否相等

在项目中创建Opinion类,在主方法中创建两个String型变量,它们的值分别为"abc"和"ABC",判断这两个字符串是否相等。实例代码如下:

java 复制代码
public class Opinion{    //创建类
    public static void main(String args[]){    //主方法
        String s1 = new String("abc");    //创建字符串对象s1
        String s2 = new String("ABC");    //创建字符串对象s2
        boolean b1 = s1.equals(s2);    //使用equals()方法比较s1与s2
        boolean b2 = s1.equalsIgnoreCase(s2);    //使用equalslgnoreCase()方法比较s1与s2
        System.out.println(s1+" equals"+s2+": "+b1);    //输出信息
        System.out.println(s1+" equalsIgnoreCase"+s2+": "+b2);
    }
}

运行结果如下:

abc equals ABC : false

abc equalsIgnoreCase ABC : true

9.4.6按字典顺序比较两个字符串

compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0。语法如下:

str.compareTo(String otherstr)

其中,str、otherstr是要比较的两个字符串对象。

说明:

compareTo()方法只有在equals(Object)方法返回true时才返回0。

【例6】判断字母b的位置

在项目中创建Wordbook类,在主方法中创建3个String变量,它们的值分别为a、b和c,使用compareTo()方法判断字母b的位置,即在字母a的后面,在字母c的前面。实例代码如下:

java 复制代码
public class Wordbook{    //创建类
    public static void main(String args[]){    //主方法
        String str = new String("b");    //用于比较的3个字符串
        String str2 = new String("a");
        String str3=new String("c");
        //将str与str2比较的结果输出
        System.out.println(str+" compareTo"+str2+": "+str.compareTo(str2));
        //将str与str3比较的结果输出 
        System.out.println(str+" compareTo"+str3+": "+str.compareTo(str3));
    }
}

运行结果如下:

b compareTo a: 1

b compareTo c: -1

9.4.7字母大小写转换

String类的toLowerCase()方法可将字符串中的所有大写字母改写为小写字母,而toUpperCase()方法可将字符串中的所有小写字母改写为大写字母。

1.toLowerCase()方法

该方法将字符串中的所有大写字母转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度不变。语法如下:

str.toLowerCase()

其中,str是要进行转换的字符串。

2.toUpperCase()方法

该方法将字符串中所有的小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新字符串,将原字符串中每个小写字母都转换成大写,字符串长度不变。语法如下:

str.toUpperCase()

其中,str是要进行转换的字符串。

说明:

使用toLowerCase()方法和toUpperCase()方法进行大小写转换时,数字或其他非英文字母类字符不受影响。

【例7】字母大小写转换

在项目中创建UpAndLower类,在主方法中创建一个值为"Oh My God"的String型变量,对这个字符串进行字母大小写转换,将转换后的结果输出在控制台上。实例代码如下:

java 复制代码
public class UpAndLower{    //创建类
    public static void main(String args[]){    //主方法
        String str = new String("Oh My God");    //创建字符串str
        String newstr1 = str.toLowerCase();    //使用toLowerCase()方法实行小写转换
        String newstr2 = str.toUpperCase();    //使用toUpperCase()方法实行大写转换
        System.out.println(newstr1);    //将转换后的结果输出
        System.out.println(newstr2);
    }
}

运行结果如下:

oh my god

OH MY GOD

9.4.8字符串分割

使用split()方法可以使字符串按指定的分割字符或字符串进行分割,并将分割后的结果存放在字符串数组中。split()方法提供了以下两种字符串分割形式。

1.split(String sign)

该方法可根据给定的分割符对字符串进行拆分。语法如下:

str.split(String sign)

其中,sign为分割字符串的分割符,也可以使用正则表达式。

说明:

没有统一的对字符进行分割的符号。如果想定义多个分割符,可使用符号"|"。例如,",|="表示分割符分别为","和"="。

2.split(String sign,int limit)

该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数。语法如下:

str.split(String sign,int limit)

☑ sign:分割字符串的分割符,也可以使用正则表达式。

☑ limit:限制的分割次数。

【例8】按要求分割"192.168.0.1"

在项目中创建Division类,在主方法中创建一个值为"192.168.0.1"的String型变量,先按照"."分割字符串,再按照"."对这个字符串进行两次分割。实例代码如下:

java 复制代码
public class Division{
    public static void main(String[] args){
        String str = "192.168.0.1";    //创建字符串
        String[] firstArray = str.split("\\.");    //按照"."进行分割,使用转义字符"\\."    
        String[] secondArray = str.split("\\.",2);    //按照"."进行两次分割,使用转义字符"\\."    
        System.out.println("str的原值为:["+str+"]");    //输出str原值
        System.out.print("全部分割的结果:");    //输出全部分割的结果
        for(String a : firstArray){
            System.out.print("["+a+"]");
        }
        System.out.println();    //换行
        System.out.print("分割两次的结果:");    //输出分割两次的结果
        for(String a : secondArray){
            System.out.print("["+a+"]");
        }
        System.out.println();
    }
}

运行结果如下:

str的原值为:[192.168.0.1]

全部分割的结果:[192][168][0][1]

分割两次的结果:[192][168.0.1]

相关推荐
Coder个人博客1 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
侠客行03172 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪2 小时前
深入浅出LangChain4J
java·langchain·llm
较劲男子汉4 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
灰子学技术4 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
老毛肚4 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
Doro再努力4 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp4 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎4 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
二十雨辰4 小时前
[python]-AI大模型
开发语言·人工智能·python