请问如何在JAVA里做 模糊查询。 各位老师,我是一个初学者 我现在遇到一个难题希望各位指点 请问用JAVA怎么进行模糊查询 都有几种方法; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不明百你是问的什么??.. 是数据库模糊查询吗? 用 like "%" sql语句吗?用like%是未知个数的字符。 意思是:比如有三个字符串:s1="abc";s2="ba";s3="cc";如果我输入c的话能够把s1和s3值都给打印出来。这个怎么实现? 不是用SQL语句查,我现在还没学到那呢,用基础的java语句怎么做模糊查询? containspublic boolean contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true。 参数:s - 要搜索的序列 返回:如果此字符串包含 s,则返回 true,否则返回 false 抛出: NullPointerException - 如果 s 为 null从以下版本开始: 1.5 String里有很多方法可以判断出字符串里是否包含指定内容,如果包含,就打印出来就可以了吧 不太理解LZ的意思,你是不是想判断一个字符串中是否包含某些字符啊?如果是的话:--------------------------------------------------------public class Test { /** * 比较字符串,字符串str中是否包含s字符串 * * @param str * @param s * @return * * @author kakukyowu */ public static boolean getString(String str, String s) { return str.matches(".*" + s + ".*"); } /** * main函数 * * @param args * * @author kakukyowu */ public static void main(String[] args) { String str = "testtesttest5566testtest"; // 测试一 String s1 = "556"; boolean b1 = getString(str, s1); // 测试二 String s2 = "abc"; boolean b2 = getString(str, s2); System.out.println("测试一: " + (b1 ? "包含" : "不包含")); System.out.println("测试二: " + (b2 ? "包含" : "不包含")); }} import java.io.*;public class FindJavaFile { public static void main(String[] args) { File file = new File("D:\\workspace"); find(file); } //查找所有的java文件 public static void find(File f){ FileFilter ff = new MyFileFilter(); File[] fs = f.listFiles(ff); for(int i=0; i<fs.length; i++){ if(fs[i].isDirectory()){ //递归 find(fs[i]); }else{ System.out.println(fs[i].getAbsolutePath()); } } }}class MyFileFilter implements FileFilter{ public boolean accept(File file) { if(file.getAbsolutePath().endsWith(".java") || file.isDirectory()) return true; else return false; }}这例子你看看吧,可以查找D:\\workspace目录下的以java结尾的文件。 sql 例如:: select * from table as t where t.column like '%模糊关键字%'; if(s1.indexOf("c")!=-1) do your things如果要更复杂的 那就用正则表达市 这样 我没表达好我要说的意思,我再举个例子:有一个字符串数组String[] s = {"abc","bc","dd"}; 我从键盘输入c,怎么才能打印出含有c的数组元素呢 ? 模糊查询多用于正则表达式中对于你的问题 可以使用String的maches方法进行匹配 String s1 = "abc"; String s2 = "ba"; String s3 = "cc"; String[] strArray = {s1,s2,s3}; for(String k: strArray){ if(k.matches("[\\w]+c")){ System.out.println(k); } }这个就可以实现 public class Test { private static String[] s = { "abcd", "bcd", "ddff" }; /** * 从arrays中找出含有inputStr的字符串,放入list中返回 * * @param arrays * @param inputStr * @return * * @author kakukyowu */ private static List<String> getResult(String[] arrays, String inputStr) { List<String> list = new ArrayList<String>(); for (String s : arrays) { if (s.matches(".*" + inputStr + ".*")) { list.add(s); } } return list; } /** * main函数 * * @param args * * @author kakukyowu */ public static void main(String[] args) { System.out.println("请输入查询内容:"); Scanner sc = new Scanner(System.in); String inputStr = sc.nextLine(); List<String> list = getResult(s, inputStr); System.out.println("" + '\n' + "查询结果:"); if (list.isEmpty()) { System.out.println("没有查询到相应的结果!"); } else { for (String s : list) { System.out.println(s); } } }} 楼主的表达能力实在是太好了,不知道你讲的是什么!是字符串的查找么?要是字符串的查找就用正则表达式,要是数据库的话看一下SQL Like语句就行了 public void stringTest(String str){ String[] s = {"abc","bc","dd"}; for(String ss : s){ if(ss.indexOf(str) != -1) System.out.println(ss); } } 恩 用String的maches方法 很好 出来了 但是请15楼的老师讲讲 (".*" + inputStr + ".*")这个正则表达式是什么意思?我也用到了这个方法但是没有打印出来结果,我看了下 我用的正则表达式和您的不一样 我用的是:(""+inputStr+"")这种样式;还请指点一下 package Test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.regex.Matcher;import java.util.regex.Pattern;public class TestString { public static void main(String[] args) throws IOException{ BufferedReader buffer; String str; buffer = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Please input:"); str = buffer.readLine(); String[] s = {"abc","bc","dd"}; for(int i=0;i<s.length;i++){ Pattern p = Pattern.compile(str); Matcher m = p.matcher(s[i]); if(m.find()==true){ System.out.println(s[i]); } } }}哎,java还在学习ing 就想到这个了。望高手指教. 以学生表student为例,表中有一个列名为stu_nameselect * from student where stu_name like %str%; select * from 表明 where 列明 like %要找的内容% 例如:String str1 = "abc5566defg";String str2 = "5566";如果你想要知道str1中是否包含5566,那么就可以用boolean b = "abc5566defg".matches(".*5566.*"); 结果为: true ==》包含结果为: false ==》不包含.*代表任意字符的意思,就好比sql中的% 一个很简单问题(如何把\转为/) j2se方法的调用,get() set()的用法 怎么让JPanel变化 如果构造函数是私有的 Eclipse 3.3.2 中开发 RCP的程序, 如何导出linux product? JAVA中那几个颜色都用什么INT代表呢? 那位大哥会用exe4j呀?? 菜鸟发问:J2EE学习顺序 java有哪四个版本 我的JAR的文件问题,各位大虾帮帮忙了!! 内部类 一道继承与类变量的题
%是未知个数的字符。
public boolean contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true。 参数:
s - 要搜索的序列
返回:
如果此字符串包含 s,则返回 true,否则返回 false
抛出:
NullPointerException - 如果 s 为 null
从以下版本开始:
1.5 String里有很多方法可以判断出字符串里是否包含指定内容,如果包含,就打印出来就可以了吧
如果是的话:
--------------------------------------------------------public class Test { /**
* 比较字符串,字符串str中是否包含s字符串
*
* @param str
* @param s
* @return
*
* @author kakukyowu
*/
public static boolean getString(String str, String s) { return str.matches(".*" + s + ".*");
} /**
* main函数
*
* @param args
*
* @author kakukyowu
*/
public static void main(String[] args) { String str = "testtesttest5566testtest"; // 测试一
String s1 = "556";
boolean b1 = getString(str, s1); // 测试二
String s2 = "abc";
boolean b2 = getString(str, s2); System.out.println("测试一: " + (b1 ? "包含" : "不包含"));
System.out.println("测试二: " + (b2 ? "包含" : "不包含")); }
}
public class FindJavaFile { public static void main(String[] args) {
File file = new File("D:\\workspace");
find(file);
}
//查找所有的java文件
public static void find(File f){
FileFilter ff = new MyFileFilter();
File[] fs = f.listFiles(ff);
for(int i=0; i<fs.length; i++){
if(fs[i].isDirectory()){
//递归
find(fs[i]);
}else{
System.out.println(fs[i].getAbsolutePath());
}
}
}
}class MyFileFilter implements FileFilter{
public boolean accept(File file) {
if(file.getAbsolutePath().endsWith(".java") || file.isDirectory())
return true;
else
return false;
}
}这例子你看看吧,可以查找D:\\workspace目录下的以java结尾的文件。
if(s1.indexOf("c")!=-1)
do your things如果要更复杂的 那就用正则表达市
String s1 = "abc";
String s2 = "ba";
String s3 = "cc";
String[] strArray = {s1,s2,s3};
for(String k: strArray){
if(k.matches("[\\w]+c")){
System.out.println(k);
}
}
这个就可以实现
public class Test { private static String[] s = { "abcd", "bcd", "ddff" }; /**
* 从arrays中找出含有inputStr的字符串,放入list中返回
*
* @param arrays
* @param inputStr
* @return
*
* @author kakukyowu
*/
private static List<String> getResult(String[] arrays, String inputStr) { List<String> list = new ArrayList<String>(); for (String s : arrays) {
if (s.matches(".*" + inputStr + ".*")) {
list.add(s);
}
} return list;
} /**
* main函数
*
* @param args
*
* @author kakukyowu
*/
public static void main(String[] args) { System.out.println("请输入查询内容:");
Scanner sc = new Scanner(System.in);
String inputStr = sc.nextLine(); List<String> list = getResult(s, inputStr); System.out.println("" + '\n' + "查询结果:"); if (list.isEmpty()) {
System.out.println("没有查询到相应的结果!");
} else {
for (String s : list) {
System.out.println(s);
}
}
}
}
public void stringTest(String str){
String[] s = {"abc","bc","dd"};
for(String ss : s){
if(ss.indexOf(str) != -1)
System.out.println(ss);
}
}
我也用到了这个方法但是没有打印出来结果,我看了下 我用的正则表达式和您的不一样 我用的是:(""+inputStr+"")这种样式;还请指点一下
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TestString { public static void main(String[] args) throws IOException{
BufferedReader buffer;
String str;
buffer = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input:");
str = buffer.readLine();
String[] s = {"abc","bc","dd"};
for(int i=0;i<s.length;i++){
Pattern p = Pattern.compile(str);
Matcher m = p.matcher(s[i]);
if(m.find()==true){
System.out.println(s[i]);
}
}
}
}哎,java还在学习ing 就想到这个了。望高手指教.
select * from student where stu_name like %str%;
select * from 表明 where 列明 like %要找的内容%
例如:
String str1 = "abc5566defg";
String str2 = "5566";
如果你想要知道str1中是否包含5566,那么就可以用
boolean b = "abc5566defg".matches(".*5566.*");
结果为: true ==》包含
结果为: false ==》不包含
.*代表任意字符的意思,就好比sql中的%