一、需求分析
对于一个通讯录
- 1、创建Contact类联系人类
需要一个titles(即一个分栏)
需要一个map集合来存储每个分栏的人map<String,ArrayList>;
需要show方法和add方法; - 2、需要一个Person类来存储每个人
二、代码实现
Contact类
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Contact {
ArrayList<String> titles;
Map<String,ArrayList<Person>> contacts;
//通过构造方法创建两个集合对象
public Contact(){
titles=new ArrayList<>();
contacts=new HashMap<>();
}
//展示每一位联系人的信息
public void showList(){
for (String title : titles) {
System.out.println(title);
ArrayList<Person> people = contacts.get(title);
for (Person person : people) {
System.out.println(person.name);
}
}
}
public void addPerson(Person person){
String title = person.firstAlphaString.substring(0, 1);
//若已存在分栏
if(titles.contains(title)){
ArrayList<Person> people = contacts.get(title);
people.add(person);
//若分栏不存在
}else{
titles.add(title);
Collections.sort(titles);
ArrayList<Person> people=new ArrayList<>();
people.add(person);
contacts.put(title,people);
}
}
}
Person类
public class Person {
String firstAlphaString;
String name;
public Person(String firstAlphaString, String name) {
this.firstAlphaString = firstAlphaString;
this.name = name;
}
}
主方法
import java.util.Scanner;
public class Myclass {
public static void main(String[] args) {
Contact contact=new Contact();
Scanner sc=new Scanner(System.in);
//添加person
while(true){
System.out.println("请输入联系人姓名");
String name = sc.next();
//将汉字转化为拼音
String firstAlpha = Util.getFirstAlpha(name);
//System.out.println(firstAlpha);
//创建Person类
Person person=new Person(firstAlpha,name);
contact.addPerson(person);
//是否继续
boolean choice = Util.isContinue();
if(choice==false){
break;
}
}
contact.showList();
}
}
Util(自定义工具包)
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import java.util.Scanner;
public class Util {
//将姓名转化为拼音 eg:王维 WW
public static String getFirstAlpha(String string){
char[] chars = string.toCharArray();
StringBuilder sb=new StringBuilder();
for (char aChar : chars) {
if(aChar>128){
//将姓名转化为拼音
//设置输出格式
HanyuPinyinOutputFormat format=new HanyuPinyinOutputFormat();
//设置大小写
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
try {
String[] strings = PinyinHelper.toHanyuPinyinStringArray(aChar, format);
/* eg:李四
* String[0]=LI
* charAt[0]=L
*/
sb.append(strings[0].charAt(0));
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
}else{
sb.append(aChar);
}
}
return sb.toString();
}
//是否继续
public static boolean isContinue(){
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("是否继续(1、继续 2、完成)");
int choice = sc.nextInt();
if(choice==1){
return true;
}else if(choice==2){
return false;
}else{
System.out.println("输入有误请重新输入");
}
}
}
}
运行结果
PS:
Util类中将汉字转化为拼音需要 PinHelp包的帮助
链接:https://pan.baidu.com/s/1l2efoBSLS2ZtxVQUFRELKQ
提取码:dn4x