思路

借助“正则表达式”匹配单词

注意点

  • “不区分大小写”:在模式串前加上(?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);
    }
}