需求:从一个指定的字符串中,查找是否存在指定的关键字,有则将其按顺序找出。例如:从"我在开会,一会打电话,然后去吃饭" 查找是否含有 "教研"、"上课"、"开会"、"打电话"、"吃饭" ,结果是查找到"开会" "打电话" "吃饭"。
分析:可以简单的进行字符串扫描,对每一个关键字进行匹配,开始位置为0,扫描到则下次开始的位置加上字符串的长度。
代码如下:
package cc.dc.test;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
//记录找到的关键字
private static List keywordsList = new ArrayList();
public static void main(String[] args) {
//待查找的字符串
String content = "我在开会,一会打电话,然后去吃饭";
//搜索的关键字
String[] subStrings = {"打电话","开会","吃饭"};
getRemindString(content,subStrings);
for(String str:keywordsList){
System.out.print(str+"--");
}
}
private static void getRemindString(String content, String[] subStrings) {
int[] array = new int[content.length()];
for (int i = 0; i < array.length; i++) {
//默认设置为10000,最后判断不是10000的位置就是关键字
array[i] = 10000;
}
for (int j = 0; j < subStrings.length; j++) {
String findStr = subStrings[j];
// 待查找字符串的长度
int findLength = findStr.length();
for (int i = 0; i < content.length();) {
if ((findLength + i) <= content.length()
&& content.substring(i, findLength + i).equals(findStr)) {
// 查找到的位置
//System.out.println("find " + i + "--"+ content.substring(i, findLength + i));
//找到,则设置其在subStrings的位置
array[i] = j;
// 找到则下次查找的位置+字符长度
i += findLength;
} else {
// 没有找到则从下一个位置开始查找
i++;
}
if (i + findLength > content.length()) {
// 如果下一次查找的endIndex>str.length()则说明不可能再有该字符串了
break;
}
}
}
for (int i = 0; i < array.length; i++) {
//所有不是10000的位置都是查找到关键字的位置
if (array[i] != 10000) {
//System.out.println("--" + subStrings[array[i]] + "--");
keywordsList.add(subStrings[array[i]]);
}
}
}
}
结果如下: