本章节将通过面向对象的思想来解决该问题。
目录
一、题目描述
二、思路分析
三、代码实现
代码示例
题目:
给定两个字符串,分别是s1和s2,写一个方法来返回s1和s2字符串中不同字符的字符串。
例如:
字符串s1="Hello!My name is Xiao Ming!"
字符串s2="Hello,Good!"
那么返回后的字符串为"My nam is Xia Ming"
分析:
要想删除字符串s1和s2中相同的字符,我们需要遍历这两个字符串。
找到两个字符串中不相同的字符,然后将其拼接成一个新的字符串即可。
但接下来就有一个问题,要怎么将提取出来的字符拼接成一个字符串呢❓
代码思路:
我们可以利用数据结构当中的顺序表ArrayList实现List接口,通过ArrayList内重写List的各种方法来进行操作。
ArrayList类底层其实是一个数组。
我们可以把字符串中不同的字符提取出来,增添进创建的一个List类型的引用变量里(数组)。
该代码中会用到add()和contains()这两个方法即可。
add()是增添元素
contains() 是判断当前创建的引用内是否存在要判定的元素
我们只需遍历一个字符串s1,然后判定s2字符串中是否遍历的这些字符,如果没有就将该字符增添进实例化的引用对象里去。
public class Main {
public static List func(String s1, String s2){
if(s1==null||s2==null){
return null;
}
if(s1.length()==0||s2.length()==0){
return null;
}
List arr=new ArrayList<>();
for (int i = 0; i < s1.length(); i++) {
//通过charAt提取s1每一个下标的字符
char ch=s1.charAt(i);
//此处contains是判断s1字符串中的元素是否在s2中有包含
if(!s2.contains(ch+"")){
arr.add(ch);
}
}
return arr;
}
public static void main(String[] args) {
String s1="Hello!My name is Xiao Ming!";
String s2="Hello,Good!";
List ret=func(s1,s2);
for (char ch:ret) {
System.out.print(ch);
}
}
}
(1)首先定义一个返回类型为List
的方法,参数是两个字符串s1和s2. 注意:此处是一个泛型类,Character是char的包装类作为实参.
(2)因为返回类型是List
,那么在方法内部,我们得先定义一个List 类型的引用变量,并实例化ArrayList<>();
(3)因为ArrayList底层其实是一个数组,那么就可以开始进行字符串遍历.
通过循环遍历字符串s1中的每一个字符,用arr中的contains()方法判断字符串s2中是否包含字符串s1中的字符。
contains()方法内的参数是CharSequence (字符序列)类型,因此在传参的时候对字符ch拼接一个空字符串,将其转变为字符串
(5)主方法main中,创建一个相同类的引用变量ret调用该方法。
之后通过for-each 循环,对里面的字符进行输出
(6)为了使代码更具严谨性,可以写两个if语句,判断这两个字符串是否合法(长度是否为0或字符串为空null)
代码运行结果:
今天对删除两个字符串中相同的字符问题,到这里就结束了。
如果对各位有所帮助的话,还希望能支持一下,谢谢!