【JAVA】字符串操作 —字符串赋值、输出、合并、比较、查找、替换
一、前言
前面,我们整体学习了有关文件操作方面的知识,实现了检测、新建、修改文件并写入或者复制移动的操作。本次学习的是有关字符串
方面的操作,为方便大家学习,可以参照API阅读此类的各个方法知识。
API链接如下:https://pan.baidu.com/s/1_DMTYTstbDtfdjutBE3h8Q 提取码:elgp
字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
二、任务学习
任务要求:
- 完成一个java application应用程序,完成字符串的各种操作。
- 操作包括字符串的初始化赋值和输出。
- 操作包括两个字符串相加合成为一个新字符串。
- 操作包括两个字符串比较其是否相同。
- 操作包括已知一个字符串,查找某一子字符串是否被包含在此字符串之中,如果包含,包含了多少次。
- 操作包括已知一个字符串及其包含的某一子字符串,把此子字符串替换为其他的新的指定字符串。
1)分析学习:
1.1 字符串的初始化赋值和输出
String类又称作
不可变
字符序列。String位于
java.lang
包中,Java程序默认导入java.lang
包下的所有类。Java字符串就是
Unicode
字符序列,例如字符串“Java”就是4个Unicode
字符’J’、’a’、’v’、’a’组成的。Java
没有内置的字符串类型
,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例。
1.2 将两个字符串合并为新字符串
Java允许使用符号”+
“把两个字符串连接
起来。
例:
String s1 = "Hello";
String s2 = "World! ";
String s = s1 + s2; //HelloWorld!
符号”+
“把两个字符串按给定的顺序连接
在一起,并且是完全按照给定的形式。
当”+”运算符两侧的操作数中只要有一个是字符串(String)类型
,系统会自动将另一个操作数转换为字符串然后再进行连接。
例:
int age = 18;
String str = "age is" + age; //str赋值为"age is 18"
//这种特性通常被用在输出语句中:
System.out.println("age is" + age);//age is 18
1.3 比较两个字符串是否相同
“==
”代表比较双方是否相同。如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象。
覆盖:类 Object 中的 equals
Object类中定义有:public boolean equals(Object obj)
方法,提供定义“对象内容相等”的逻辑。比如,我们在公安系统中认为id相同的人就是同一个人、学籍系统中认为学号相同的人就是同一个人。
Object 的 equals
方法默认就是比较两个对象的hashcode
,是同一个对象的引用时返回 true
否则返回 false
。
JDK提供的一些类,如String、Date、包装类等,重写了Object的equals方法,调用这些类的equals方法, x.equals (y) ,当x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回 true 否则返回 false。
equals
与equalsIgnoreCase
的区别在于:后者将此 String 与另一个 String 比较,不考虑大小写
。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写
),则认为这两个字符串是相等的。
在忽略大小写的情况下,如果下列至少一项为 true,则认为 c1 和 c2 这两个字符相同。
1.4 查找字符串相互包含关系
在字符串中查询某个char值时,此字符可以是单字母也可以是某个字符串,但是只有包含指定的char值时才会返回确定的查找值。
当我们需要查找子字符串出现的次数时,我们需要进行遍历查找和切割判断。
方法很多,我们这里使用字符串截取的方案。使用indexOf
来查找子字符串出现处的索引,用substring
截取指导索引位置的字符串,即子串第一次出现的位置+长度=下一次的起始位置,如此循环查找,直至此字符串中没有
这样的字符,则返回 -1
退出循环语句。
1.5 替换字符串中指定字符
public String replace(char oldChar, char newChar)
方法可以返回一个新字符串,这个新串是通过用newChar
替换此字符串中出现的所有oldCha
r而生成的。
2)程序代码:
为实现整体效果,本人将以上所提的方法写成总的一个程序,如下:
/* 项目名称:Task_Du * 创建时间:2019年4月9日 * 创建者:Administrator_wz * 创建地点:kmust * 功能:字符串的各项操作:赋值输出、对比合成、查找替换 */
import java.util.Scanner;//导入java.util包中的Scanner类
public class stringTest1{ //创建类名
public static void main(String[] args){ //程序的主函数入口
//字符串的初始化赋值和输出
Scanner s1 = new Scanner(System.in);//获取键盘输入并赋值给s1字符串
System.out.println("请给字符串a赋值:");//输入提示信息
String a = s1.nextLine();//定义字符串变量,并赋值为用户输入的信息
Scanner s2 = new Scanner(System.in);//获取键盘输入并赋值给s2字符串
System.out.println("请给字符串b赋值:");//输入提示信息
String b = s2.nextLine();//定义字符串变量,并赋值为用户输入的信息
System.out.println("字符串a的内容为:"+a);//输出字符串a赋值后的内容
System.out.println("字符串a的内容为:"+b);//输出字符串b赋值后的内容
//将两个字符串比较是否相同
System.out.println("两字符串的内容是否相同? "+a.equals(b));//输出结果信息
//System.out.println(a==b); //比较两字符串是否同一个对象
//System.out.println(a.equals(b)); //比较两个字符串内容是否相同
//System.out.println(a.equalsIgnoreCase(b));//比较两个字符串(忽略大小写)
//将两个字符串相加合成为一个新字符串
String c = a + b;//合并两个字符串
System.out.println("字符串a与b合并之后的内容为:\n"+c);//输出合并字符串
//查找某一子字符串是否被包含在此字符串之中,如果包含,包含了多少次
Scanner s3 = new Scanner(System.in);//获取键盘输入并赋值给s3字符串
System.out.println("请输入想要查找的字符串:");//输入提示信息
String d = s3.nextLine();//定义字符串变量,并赋值为用户输入的信息
boolean con =c.contains(d);//子字符串是否被包含在此字符串之中,包含输出true,否则输出false
System.out.println("子字符串是否被包含在此字符串之中:"+con);//输出结果信息
System.out.println("包含次数为:"+repetitions(c,d));//调用count,输出包含次数
//把此子字符串替换为其他的新的指定字符串。
Scanner s4 = new Scanner(System.in);//获取键盘输入并赋值给s4字符串
System.out.println("请选择是否替换字符(串):确定(1)/拒绝(2)");//提示选择查询方式
int e = s4.nextInt();//定义一个int类型变量,选择查询方式
switch(e){ //查询方式类
case 1://查询类型1,替换字符(串)后输出
Scanner s5 = new Scanner(System.in);//获取键盘输入并赋值给s5字符串
System.out.println("请输入想要替换的原字符:");//输入提示信息
String f = s5.nextLine();//定义字符串变量,并赋值为用户输入的信息
Scanner s6 = new Scanner(System.in);//获取键盘输入并赋值给s6字符串
System.out.println("请输入想要替换的原字符:");//输入提示信息
String g = s6.nextLine();//定义字符串变量,并赋值为用户输入的信息
String z=c.replace(f,g);//将f替换为g
System.out.println("替换前:"+c);//输出替换前字符串信息
System.out.println("替换后:"+z);//输出替换后字符串信息
break;//跳出
case 2://查询类型2,不替换
System.out.println("最终的字符串内容为:\n"+c);//输出合并字符串
break;//跳出
default://输入有误项
System.out.println("该字符(串)有误");//输出错误提示
break;//跳出
}
}
public static int repetitions(String c, String d) { //创建repetitions统计出现次数
int count = 0;//创建一个计数器,统计次数
int fromIndex = 0;//创建计数器,设开始的地址
while ((fromIndex = c.indexOf(d, fromIndex)) != -1) { // 循环到没有输出-1时就停止循环
fromIndex = fromIndex + d.length();//子串第一次出现的位置+长度=下一次的起始位置
count++;//次数加1
}
return count;//返回值
}
}
3)执行结果
分部拆装效果见下:
String
类常用的方法有(可到API中查看,部分前面也已讲过,此处不赘述):
String类的下述方法能创建并返回一个新的String对象:
concat()、 replace()、substring()、 toLowerCase()、 toUpperCase()、trim()
。提供查找功能的有关方法:
endsWith()、 startsWith()、 indexOf()、lastIndexOf()
。提供比较功能的方法:
equals()、equalsIgnoreCase()、compareTo()。
其它方法:
charAt() 、length()。
参考链接:
https://blog.csdn.net/hacker754/article/details/78686212
https://blog.csdn.net/u014259820/article/details/79654444
https://blog.csdn.net/qq276295783/article/details/84947981
https://blog.csdn.net/wufaliang003/article/details/74931375/
https://blog.csdn.net/weixin_42014622/article/details/82988533
https://blog.csdn.net/mingzhuo_126/article/details/83653422
https://blog.csdn.net/P90X_Liyuan/article/details/79573294
https://blog.csdn.net/jiaxianggege215/article/details/78206167
原文地址: https://blog.csdn.net/qq_42446456/article/details/89161494
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章