♥今天是2023年7月30日,天气晴,温度39℃!♥
无意中看到这样一个需求:使用java编写程序,定义一个方法,该方法接收两个字符串,返回两个字符串中相同字符
这样的题目放在学习基础阶段,可能不假思索的就做出来了,现在感觉基础又还给老师了,还得思考好一会呢,我用了两种方法做了一下,请各位小伙伴过过目,提提醒,如果是面试题目,哪种方式是最优解,或者还有其他最优解的方式吗?
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
/**
* @ClassName AppTest
* @Description 创建一个类,该类中有1个方法,接收2个字符串,
* 返回两个字符串中的相同字符(利用单利设计模式,保证该类只有一个实例)
* @Author BlackCheng
* @Date 2023/7/30 20:42
* @Version 1.0
*/
public class AppTest {
public static void main(String[] args) {
MyUtil myUtil = MyUtil.getMyUtil();
String str = "abc";
String str2 = "acf";
Collection commonCharacters = myUtil.findCommonCharacters(str, str2);
System.out.println("commonCharacters = " + commonCharacters);
String sameChar = myUtil.findSameChar(str, str2);
System.out.println("sameChar = " + sameChar);
}
}
/**
该类是单利设计模式(饿汉式)设计
*/
class MyUtils {
private static volatile MyUtils instance;
private MyUtils() {
}
// 提供对外创建对象的方法
public static MyUtils getInstance() {
if(instance== null) {
synchronized (MyUtils.class) {
if(instance== null) {
instance= new MyUtils();
}
}
}
return instance;
}
/**
* 接收2个字符串,返回两个字符串中的相同字符
* ♥♥♥♥♥♥♥♥♥方式一♥♥♥♥♥♥♥♥♥
* 解题思路: 1、首先将接收到的2个字符串分别转换成字符数组
* 2、创建2个集合,分别遍历两个字符数组,然后将遍历的元素分别添加到集合中
* 3、利用集合的retailAll()方法获得两个集合中的交集
* @param str1
* @param str2
* @return
*/
public Collection findCommonCharacters(String str1, String str2) {
char[] chars = str1.toCharArray();
char[] chars1 = str2.toCharArray();
List<Character> list = new ArrayList<>();
List<Character> list1 = new ArrayList<>();
for (char aChar : chars) {
list.add(aChar);
}
for (char bChar : chars1) {
list1.add(bChar);
}
list.retainAll(list1);
return list;
}
/**
*接收2个字符串,返回两个字符串中的相同字符
* ♥♥♥♥♥♥♥♥♥方式二♥♥♥♥♥♥♥♥♥
* 解题思路: 1、创建可变字符串StringBuild
* 2、遍历接收到的其中的任意一个字符串
* 3、利用charAt()方法获取到字符串中的每一个字符
* 4、通过indexof()方法判断取到的每个字符是否存在于另一个字符串中
*
* @param str1
* @param str2
* @return
*/
public String findSameChar(String str1, String str2) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < str1.length(); i++) {
char c = str1.charAt(i);
// indexOf():返回字符在字符串中出现的索引位置,如果没有查到则返回-1
// valueOf(): 可以将所有的基本数据类型转换成String类型
if (str2.indexOf(c) >= 0 && result.indexOf(str2.valueOf(c)) < 0) {
result.append(c);
}
}
return result.toString();
}
}
♥感兴趣的小伙伴可以评论区留言探讨一下♥