注:不一定能AC,只是有相同的结果输出。代码的鲁棒性不一定好。
方法:字符串的分割、匹配
import java.util.ArrayList;
public class Main {
public static void main (String args[])
{
String test = "请播放周杰伦的七周香给我听";
String input = "singer_周杰|周杰伦|刘德华|王力宏;song_冰雨|北京欢迎你|七周香|周林;actor_周杰伦|孙倩;derector_周杰伦";
String RES = "";
String[] strs = input.split(";");
ArrayList<String> res = new ArrayList<>();
ArrayList<Integer> resI = new ArrayList<>();
for(int i=0; i<test.length(); i++){
String sub = test.substring(i, i+1);
for(int j=0; j<strs.length; j++){
if(strs[j].contains(sub)){
int index = strs[j].indexOf("_");
String stemp = strs[j].substring(index+1);
stemp = stemp.replace('|', ',');
String[] names = stemp.split(",");
int len = 0;
String res1 = "";
for(int k=0; k<names.length; k++){
if(names[k].contains(sub)){
if(names[k].length()>len){
len = names[k].length();
res1 = names[k];
}
}
}
if(res.isEmpty()){
res.add(res1);
}else if(!res.contains(res1) && res.get(res.size()-1).equals(res1)){
res.add(res1);
}
resI.add(j);
}else{
continue;
}
}
if(res.isEmpty()){
RES +=sub;
}else{
String judge = res.remove(res.size()-1);
if(judge!=null && !judge.contains(sub)){
RES +=sub;
}else{
int add = judge.length()-1;
i = add+i;
RES +=" "+judge+"/";
for(int z=0, size = resI.size(); z<size; z++){
int index2 = resI.get(z);
String sign = strs[index2];
int index3 = sign.indexOf("_");
sign = sign.substring(0, index3);
RES +=sign+",";
}
int index4 = RES.lastIndexOf(",");
RES = RES.substring(0, index4);
RES +=" ";
resI.clear();
}
}
}
System.out.println(RES);
}
}