试题H人物相关性分析

problemJB12.png

problemJB13.png

代码实现

public class TestH {
    public static void main(String[] args) {
        String str = "This is a story about Alice and Bob. Alice wants to send a private message to Bob.Alice Bob.";
        String name1 = "Alice";
        String name2 = "Bob";
        int length = 20;
        int result = getNum(str,name1,name2,length);
        System.out.println(result);
    }
    public static int getNum(String string,String name1,String name2,int length){
        int num = 0;
        int first; // 第一次出现的地方索引
        String name;  // 要匹配的名字
        String cName; // 当前名字
        // 1.截取第一次出现后的20个字符
        while (string.length() != 0) {
            int name1First = string.indexOf(name1);
            int name2First = string.indexOf(name2);
            // 使用了第一次出现的较早的索引,匹配的名应该为第一次出现的较晚的名字
            first = name1First > name2First ? name2First : name1First;
            name = name1First > name2First ? name1 : name2;
            cName = name1First > name2First ? name2 : name1;
            if(first == -1){
                break;
            }
            String subString;
            try{
                subString = string.substring(first, first + length);
            }catch (Exception e){
                subString = string.substring(first);
            }
            // 2.遍历这20个字符内是否包含有另外一个名字
            for (int i = 0; i < subString.length() - name.length(); i++) {
                String temp = subString.substring(i, i + name.length());
                // 3.若有,判断前后是否有字母:有,继续2;没有++;继续2;
                if (temp.equals(name)) {
                    // 判断前后是否是字母
                    if (!isLetter(subString.charAt(i - 1)) && !isLetter(subString.charAt(i + name.length()))) {
                        num++;
                    }
                }
            }
            string = string.substring(first+cName.length());
        }
        // 4.若没有,截去开头到这个名字后的字符串,拿后半段继续执行1
        return num;
    }

    public static boolean isLetter(char c) {
        if ((c >= 65 && c <= 90) || (c >= 97 && c <= 122)) {
            return true;
        }
        return false;
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容