package org.example;
import com.hankcs.hanlp.HanLP;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Scanner;
public class Dome04_text {
public static void main(String[] args) throws IOException {
LinkedList<Map<String, String>> contacts = new LinkedList<>();
//1.读取文件
BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\Data\\d.txt"));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
HashMap<String, String> contact = new HashMap<>();
contact.put("name", line);
String pingyin = HanLP.convertToPinyinString(line, " ", false);
contact.put("pinyin", pingyin);
contact.put("firstLetter", pingyin.substring(0, 1));
contact.put("firstLetters", HanLP.convertToPinyinFirstCharString(line, " ", false));
contacts.add(contact);
}
contacts.sort(((o1, o2) -> o1.get("firstLetters").compareTo(o2.get("firstLetters"))));
//搜索
while (true) {
Scanner scanner = new Scanner(System.in);
System.out.println("-----------菜单-----------");
System.out.println("1.根据字母搜索");
System.out.println("2.根据拼音搜索");
System.out.println("3.根据名字搜索");
System.out.println("4.根据繁体字搜索");
System.out.println("0.退出");
System.out.print("请输入菜单:");
switch (scanner.next()) {
// 根据字母搜索
case "1":
System.out.print("请输入字母:");
String firstLetter = scanner.next();
LinkedList<Map<String, String>> search1 = new LinkedList<>();
contacts.forEach(contact -> {
if (firstLetter.equalsIgnoreCase(contact.get("firstLetter"))) {
search1.add(contact);
}
});
System.out.println(search1);
break;
// 根据拼音搜索
case "2":
System.out.println("请输入拼音:");
String letter = scanner.next();
LinkedList<Map<String, String>> search2 = new LinkedList<>();
for (char c : letter.toCharArray()) {
for (Map<String, String> contact : contacts) {
if (contact.get("pinyin").contains(String.valueOf(c))) {
search2.add(contact);
break;
}
}
}
System.out.println(search2);
break;
// 根据名字搜索
case "3":
System.out.println("请输入名字:");
String names = scanner.next();
LinkedList<Map<String, String>> search3 = new LinkedList<>();
for (char c : names.toCharArray()) {
for (Map<String, String> contact : contacts) {
System.out.println(contact);
if (contact.get("name").contains(String.valueOf(c))) {
search3.add(contact);
}
}
}
// System.out.println(search3);
break;
// 根据繁体字搜索
case "4":
System.out.println("请输入繁体名字:");
String antiName = scanner.next();
String s = HanLP.convertToSimplifiedChinese(antiName);
LinkedList<Map<String, String>> search4 = new LinkedList<>();
for (char c : s.toCharArray()) {
for (Map<String, String> contact : contacts) {
if (contact.get("name").contains(String.valueOf(c))) {
search4.add(contact);
}
}
}
System.out.println(search4);
break;
case "0":
System.exit(0);
}
}
}
}
运行结果