一个查找字符串的问题

leonpard 2005-09-28 11:58:40
假设存在不定数量且长度不等不规则的字符串n个,举例如下:
String[] src={"a","b","c",....,"nnnn"...};

另有感兴趣的不定数量且长度不等不规则的字符串n个,举例如下:
String[] key={"u","v","w","x","y","z",......};

src的数量基本在10个左右,key数量庞大,可能超过1k。目前是存储在数据库中。

希望能从src中按照以下规则找到key

1.只找到感兴趣的单个字符串,比如,从src中找到了y

2.找到字符串的感兴趣的特定组合,比如,x,z必须同时出现在src中才有意义,如果同时找到x,y就没有意义。


对于1,我现在的做法是遍历src的每一个串,看看是不是在key里面有。
但是2,我就不知道怎么搞了。
...全文
227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yulin001122 2005-10-21
  • 打赏
  • 举报
回复
先把数据库里面的东西读到内存里面来吧 反正一K这个东西不是很大 然后就遍历的找吧 在实际情况看看是不是要先把KEY或者SRC排序一下 然后进行2分搜索吧
hite2008 2005-10-21
  • 打赏
  • 举报
回复
ding
ywfcfnh 2005-09-29
  • 打赏
  • 举报
回复
回答第二个问题:
其实我觉得第二个问题应该用StringBuffer来解决比较好,因为速度比较快,而且条件比较容易实现

我的做法跟“lllllllllluoyi(罗毅)”有点象,就是先把src数组合并成一个字符串,但是要加上分隔符,不然容易判断错误,比如想要找到"bin",但是如果里面有"binary"那就很可能判断错误了。
先将bin两头加上一个特殊的字符,比如是"|",最后数组合并成"|a|b|c|aa|rr|ee|"的形式,这个时候找bin的时候,不要去直接找bin,找|bin|比较好,这样不会出现出界的问题。

下面是我写的一个类,你可以用Checker.checkExist(new String[]{"dd","aa","ss"},new String[] {"dd","ss"});

class Checker
{
public static boolean checkExist(String[] src,String[] key)
{
//src表示被查找的字符串数组
//key表示同时出现的字符串数组
//返回值是在src中是否同时存在key中出现的字符串
if((src.length|key.length)==0)
return false;
StringBuffer sb=new StringBuffer("|");
for(int i=0;i<src.length;i++)
sb.append(src[i]+"|");
for(i=0;i<key.length;i++)
if(sb.indexOf("|"+key[i]+"|")<0)return false;
return true;
}
}
ywfcfnh 2005-09-29
  • 打赏
  • 举报
回复
"key数量庞大,可能超过1k。目前是存储在数据库中"
这句话比较好,我认为你不应该纯粹从java的算法中去考虑这个问题,因为这样的做法是无论怎么做都很慢,最好的做法就是不要从数据库中获取key数组,而要用src这个字符串数组去数据库中进行搜索,找出符合条件的记录,然后再用ResultSet.getString("")方法获取,你想要的结果
SQL语句可以是:select * from table where field in ('a','b','c')
其中'a','b','c'从你的src数组中生成的一个字符串


对于第二个问题,我等下回复你
interhanchi 2005-09-28
  • 打赏
  • 举报
回复
contains
public boolean contains(CharSequence s)
Returns true if and only if this string contains the specified sequence of char values.

Parameters:
s - the sequence to search for
Returns:
true if this string contains s, false otherwise
Roy_Sashulin 2005-09-28
  • 打赏
  • 举报
回复
用字符串处理方法:String.subString()\String.indexOf()
1.把你的数组 组织成一个字符串;如:a = "abcdefghijklmn"
2.找到感兴趣的字符串组合的位置 如:b = "cd"
int pos = a.indexOf(b);
3.获取字符串组合,判断它是否存在
 string temp = a.subString(pos,pos+b.length); //这里的意思是pos是字符串的开始index,pos+b.length是结束index,如果有误差,可以调一下。
//再判断这个字符串是否有效
if (temp.equals(b)){
//ok
}
else
// no OK


62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧