作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)
输入:
guns mines missiles
aameric ssell snug dan iimsssle ot sit neeemis
输出:
guns missiles
思路:刚开始看挺懵的,这道题考点就是集合,排序这两部分的内容,详情看注解吧…
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] s1 = scanner.nextLine().split(" ");// 输入两个 字符串
String[] s2 = scanner.nextLine().split(" ");// 单词之间 分割空格
scanner.close(); // 停止输入数据
List<String> list = new ArrayList<String>();// 集合
for (String string : s2) { // 遍历 s2
String ans = f(string, s1); // 调用方法 f
if (!ans.equals("")) { // 不等于 空
list.add(ans); // 存起来
}
}
Collections.sort(list); // 集合排序
for (String string : list) { // 遍历
System.out.print(string + " "); // 输出字符串
}
}
public static String f(String str1, String[] s1) {
for (String string : s1) { // 遍历 s1
char[] n = str1.toCharArray(); // 强转字符数组
char[] m = string.toCharArray();
Arrays.sort(n); // 排序
Arrays.sort(m);
if (new String(n).equals(new String(m))) { // 一 一 比 较
return string; // 返回
}
}
return ""; // 空串
}
}