赞
踩
花了点时间,实现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!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。