题意:
给定一个字符串s
和字符串数组list
判断s中的单词是否由字典中元素组成,并用字典中元素下标取代
注:单词前后只能是空格,或者属于边界范围; 字符串s中可能含有, . " " 以及空格
s不计较大小写
最后输出被字典元素下标取代的字符串s
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class HW01{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine().toLowerCase();
String[] sList=sc.nextLine().split(" ");
HashMap<String,Integer> map=new HashMap<>();
for (int i = 0; i < sList.length; i++) {
map.put(sList[i],i);
}
StringBuffer sb=new StringBuffer();
int index=0;
ArrayList<String> li=new ArrayList<>();
s.toLowerCase();
while (index<s.length()){
//排除前置空格
while(index<s.length() && s.charAt(index)==','||s.charAt(index)=='.'||s.charAt(index)==' ' || s.charAt(index)=='"'){
sb.append(s.charAt(index++));
if(index>=s.length()) break;
}
//前缀带符合
if(index<s.length() && index>0 && ( ( s.charAt(index-1)=='"' || s.charAt(index-1)==','||s.charAt(index-1)=='.') && ('a'<=s.charAt(index) &&s.charAt(index)<='z') )){
while(index<s.length() && ('a'<=s.charAt(index) &&s.charAt(index)<='z')){
sb.append(s.charAt(index++));
if(index>=s.length()) break;
}
}
//前面是空格或者是第一个 从字符开始
if((index==0 && ('a'<=s.charAt(index) &&s.charAt(index)<='z')) || (index>0 && index<s.length() && ((s.charAt(index-1)==' ')) && ('a'<=s.charAt(index) &&s.charAt(index)<='z'))){
int right=index;
//寻找单词右边界
while(right<s.length() && ('a'<=s.charAt(right) &&s.charAt(right)<='z')){
right++;
}
if(right <s.length() && (s.charAt(right)=='"' || s.charAt(right)==','||s.charAt(right)=='.')){
sb.append(s.substring(index,right));//以符号结尾 是非法单词
}else{//以空格结尾或者 已经到达末尾
if(map.containsKey(s.substring(index,right))){//单词在字典中
sb.append(map.get(s.substring(index,right)));
}else{//不在字典中 直接添加
sb.append(s.substring(index,right));
}
}
index=right;
if(index>=s.length()) break;
}
}
System.out.println(sb.toString());
}
}
结果: