一、前言
前面,我们整体学习了有关文件操作方面的知识,实现了检测、新建、修改文件并写入或者复制移动的操作。本次学习的是有关字符串方面的操作,为方便大家学习,可以参照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替换此字符串中出现的所有oldChar而生成的。
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