JAVA 实现字符串(String)的模糊查找

花了点时间,实现JAVA 字符串(String)的模糊查找;

目的:实现用户输入关键字,查找含有该关键字的字符串,如:

输入:  I  love Java
返回:  My name is GG, i love IT,  java is good!!   (该字段含有 "i" "love" "java" 的字段(不区分大小写),所以能检索到)
注意:  1.关键字输入检索时有顺序要求,如输入"java love i", 如果没有包含该顺序关键字的字符串,是检索不到的;
       2. 输入有重复关键字时,检索也会按重复关键字去检索,如输入"kaili kaili", 返回也必须有 "xxxkailixxx xxxkailixxx"类似的字符串,否则检索不到;

直接上代码(说明:下面代码基于idea-springboot,刚从C转Java,风格还保留C风格,大家看看就行, 如有问题,欢迎指正!):

package com.example.mystring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

@SpringBootApplication
public class MyStringApplication {
    
    
    public static void main(String[] args) throws IOException {
    
    
        SpringApplication.run(MyStringApplication.class, args);
        String userStr;

        while (true)
        {
    
    
            userStr = getData();
            func01(userStr);
        }
    }

    public static String getData() throws IOException {
    
    
        String userStr;
        System.out.print("Please input: ");
        BufferedReader str = new BufferedReader(new InputStreamReader(System.in));
        userStr = str.readLine();

        return userStr;
    }

    public static void func01(String str) {
    
    
        List<String> resList = new ArrayList<>();
        String sourceStr[] = {
    
    
                "rty ryry I enter a wer with wer fgffrom the java Console.",
                "Hgow kaili I enter a strkailing with Spaertces wer the java wer.",
                "Hoghw dyuyo I enter a strwerewing with dfg from the java dfg.",
                "gh yu I 2323432 a kailikaili with dfg rty the java dfg.",
                "gh jghy I werwer a strwerweing with dfg hj the java dfg.",
                "gh do I werwe java kaili with Spaces from the java Console.",
                "My name is GG, i love IT,  java is good!!"
        };

        String[] strArray  = str.toLowerCase().split("\\s+");  //str.toLowerCase() 先转小写, "\\s+" 是按空格分割。

        for (int i =0; i< strArray.length; i++) {
    
    
            System.out.println("proStr["+i+"]: " + strArray[i]);
        }

        /* 字符数组拼接
        StringJoiner joiner = new StringJoiner("-");
        for (String s : splited) {
            joiner.add(s);
        }
        System.out.println("pro: "+ joiner.toString());
        */

        int count = 0;
        boolean isFind = false;

        for (int i = 0; i < sourceStr.length; i++) {
    
    
            boolean isOneFind = true;
            int indexTemp = 0;
            int len = 0;

            for (int j = 0; j < strArray.length; j++) {
    
    
                //这一步很关键!!  sourceStr也要转小写,如果找到了,下一个关键字要从(当前位置+刚找到的关键字的长度)处开始查找
                int index = sourceStr[i].toLowerCase().indexOf(strArray[j], indexTemp+len);
                if (index < 0) {
    
    
                    isOneFind = false;
                }
                else
                {
    
    
                    len = strArray[j].length();
                    indexTemp = index;
                }
            }

            if (isOneFind) {
    
    
                resList.add(sourceStr[i]);
                isFind = true;
                count++;
            }
        }

        if (isFind)
        {
    
    
            //System.out.println("Is find, num = "+num +":\n" + Arrays.toString(resList.toArray()));
            System.out.println("Is find, count = "+count +":\n" + resList);
        }
        else
        {
    
    
            System.out.println("Not find!!");
        }
    }

}

验证:

/*****测试1*****/
Please input: kaili kaili
proStr[0]: kaili
proStr[1]: kaili
Is find, count = 2:
[Hgow kaili I enter a strkailing with Spaertces wer the java wer., gh yu I 2323432 a kailikaili with dfg rty the java dfg.]

/*****测试2*****/
Please input: kaili
proStr[0]: kaili
Is find, count = 3:
[Hgow kaili I enter a strkailing with Spaertces wer the java wer., gh yu I 2323432 a kailikaili with dfg rty the java dfg., gh do I werwe java kaili with Spaces from the java Console.]

/*****测试3*****/
Please input: i love java
proStr[0]: i
proStr[1]: love
proStr[2]: java
Is find, count = 1:
[My name is GG, i love IT,  java is good!!]

/*****测试4*****/
Please input: java love i
proStr[0]: java
proStr[1]: lova
proStr[2]: i
Not find!!

猜你喜欢

转载自blog.csdn.net/qq_19693355/article/details/129171175