思路
借助“正则表达式”匹配单词
注意点
- “不区分大小写”:在模式串前加上(?i)即可忽略大小写;或者把原字符串转换为全大写或者全小写
边界情况
- 因为我们需要匹配到独立的单词,所以我们必须要判断当前匹配到的这个字符串是否独立,不难想到我们可以在模式串的首尾分别加一个空格; 但边界情况是:目标单词在开头或者是末尾。
- 因此,我们可以改动原字符串,在它的首尾也加上空格,这样目标在首尾的情况也就解决了(这个实现起来更简单)
- 第二种方法是:按照目标在句首、句中、句尾这三种情况分别处理(这种比较繁琐,代码如下:)
代码
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String temp = sc.nextLine();
String content = sc.nextLine();
String RegExp = "(?i)"+temp;
Pattern pattern = Pattern.compile(RegExp);
Matcher matcher = pattern.matcher(content);
int count = 0;
boolean flag = true;
int index = -1;
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
boolean hasStart = false;
if(start != 0)hasStart = content.substring(start - 1, start).equals(" ");
boolean hasEnd = false;
if(end != content.length())hasEnd = content.substring(end , end + 1).equals(" ");
if (start == 0 && hasEnd) {
count++;
if(flag){
index = start;
flag = false;
}
continue;
}
if (hasStart && hasEnd) {
count++;
if(flag){
index = start;
flag = false;
}
continue;
}
if (end == content.length() && hasStart) {
count++;
if(flag){
index = start;
flag = false;
}
}
}
if(count == 0){
System.out.println(-1);
return;
}
System.out.println(count+" "+index);
}
}