import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public class Main {
public static HanyuPinyinOutputFormat format = null;
public static String[] pinyin;
public static void main(String[] args) {
//组装数据开始
List<String> list = new ArrayList<String>();
list.add("阿西吧");
list.add("巴拉巴拉");
list.add("长安长安");
list.add("斑斑驳驳");
list.add("acs");
list.add("123sdf");
list.add("223sdf");
list.add("已拟好");
//组装数据结束
//拼音为key,汉字为value的pinyinHanziMap。例如:你好(key:nihao;value:你好)
Map<String,String> pinyinHanziMap = new HashMap<String,String>();
for(int j=0;j<list.size();j++){
pinyinHanziMap.put(getStringPinYin(list.get(j)), list.get(j));
}
//以首字母为key,汉字为value的hanziMap。例如:你好(key:n;value:你好)
Map<String , List<String>> hanziMap = new HashMap<String , List<String>>();
//针对不在a-z之间的特殊字符开头的放在key为"#"的map里面
List<String> jingList = new ArrayList<String>();
hanziMap.put("#", jingList);
//循环pinyinHanziMap
for(Entry<String, String> entry : pinyinHanziMap.entrySet()){
//取的第一个首字母
String firstWord = String.valueOf(entry.getKey().charAt(0));
//判断字符是否在a-z之间(小写)
if(entry.getKey().charAt(0) >= 'a' && entry.getKey().charAt(0) <= 'z'){
//若不在map中则添加新的key,value,若key已经存在,则追加。
if(null == hanziMap.get(firstWord)){
List<String> newList = new ArrayList<String>();
newList.add(entry.getValue());
hanziMap.put(firstWord, newList);
}else{
List<String> oldList = hanziMap.get(firstWord);
oldList.add(entry.getValue());
}
}else{
//不在a-z之间的追加在key为#
jingList = hanziMap.get("#");
jingList.add(entry.getValue());
}
}
}
//转换一个字符串
public static String getStringPinYin(String str){
StringBuilder sb = new StringBuilder();
String tempPinyin = null;
for(int i = 0; i < str.length(); ++i){
tempPinyin =getCharacterPinYin(str.charAt(i));
if(tempPinyin == null){
// 如果str.charAt(i)非汉字,则保持原样
sb.append(str.charAt(i));
}else{
sb.append(tempPinyin);
}
}
return sb.toString();
}
//转换单个字符
public static String getCharacterPinYin(char c){
try{
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
}catch(BadHanyuPinyinOutputFormatCombination e){
e.printStackTrace();
}
// 如果c不是汉字,toHanyuPinyinStringArray会返回null
if(pinyin == null) return null;
// 只取一个发音,如果是多音字,仅取第一个发音
return pinyin[0];
}
}
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public class Main {
public static HanyuPinyinOutputFormat format = null;
public static String[] pinyin;
public static void main(String[] args) {
//组装数据开始
List<String> list = new ArrayList<String>();
list.add("阿西吧");
list.add("巴拉巴拉");
list.add("长安长安");
list.add("斑斑驳驳");
list.add("acs");
list.add("123sdf");
list.add("223sdf");
list.add("已拟好");
//组装数据结束
//拼音为key,汉字为value的pinyinHanziMap。例如:你好(key:nihao;value:你好)
Map<String,String> pinyinHanziMap = new HashMap<String,String>();
for(int j=0;j<list.size();j++){
pinyinHanziMap.put(getStringPinYin(list.get(j)), list.get(j));
}
//以首字母为key,汉字为value的hanziMap。例如:你好(key:n;value:你好)
Map<String , List<String>> hanziMap = new HashMap<String , List<String>>();
//针对不在a-z之间的特殊字符开头的放在key为"#"的map里面
List<String> jingList = new ArrayList<String>();
hanziMap.put("#", jingList);
//循环pinyinHanziMap
for(Entry<String, String> entry : pinyinHanziMap.entrySet()){
//取的第一个首字母
String firstWord = String.valueOf(entry.getKey().charAt(0));
//判断字符是否在a-z之间(小写)
if(entry.getKey().charAt(0) >= 'a' && entry.getKey().charAt(0) <= 'z'){
//若不在map中则添加新的key,value,若key已经存在,则追加。
if(null == hanziMap.get(firstWord)){
List<String> newList = new ArrayList<String>();
newList.add(entry.getValue());
hanziMap.put(firstWord, newList);
}else{
List<String> oldList = hanziMap.get(firstWord);
oldList.add(entry.getValue());
}
}else{
//不在a-z之间的追加在key为#
jingList = hanziMap.get("#");
jingList.add(entry.getValue());
}
}
}
//转换一个字符串
public static String getStringPinYin(String str){
StringBuilder sb = new StringBuilder();
String tempPinyin = null;
for(int i = 0; i < str.length(); ++i){
tempPinyin =getCharacterPinYin(str.charAt(i));
if(tempPinyin == null){
// 如果str.charAt(i)非汉字,则保持原样
sb.append(str.charAt(i));
}else{
sb.append(tempPinyin);
}
}
return sb.toString();
}
//转换单个字符
public static String getCharacterPinYin(char c){
try{
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
}catch(BadHanyuPinyinOutputFormatCombination e){
e.printStackTrace();
}
// 如果c不是汉字,toHanyuPinyinStringArray会返回null
if(pinyin == null) return null;
// 只取一个发音,如果是多音字,仅取第一个发音
return pinyin[0];
}
}