首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

字符串查寻算法

2012-09-06 
字符串查找算法假设我现在拼接出了像23756563&3000343&truetrue@23756564&3000343&truetrue@23756563&3000

字符串查找算法
假设我现在拼接出了像

23756563&3000343&truetrue@23756564&3000343&truetrue@23756563&3000343&truefalse@....(500万个类似短串,以@符号分隔)

这样的长串,保存在StringBuilder中。
需要知道 "23756583&3000343&truetrue@" 有没有在长串中出现过,有没有比 StringBuilder.indexOf()更有效率的方法?

[解决办法]
StringBuffer 继承的OBJECT 所以就自己那几个方法...
[解决办法]
可以使用正则表达式,但不知道效率是否高
[解决办法]
自己写个二叉树的算法跟Stringbuffer里的方法比较一下 看看哪个效率高
[解决办法]
str.split("23756583&3000343&truetrue@");
你试试以23756583&3000343&truetrue@来分割字符串,
然后判断得到的数组长度如果大于1说明有这个字符串,
否则就是不包含这个字符串,没有进行分割
[解决办法]
用@将其分隔成字符串数组。
然后,for循环查找23756583&3000343&truetrue。注意已经没有@了。
不过500万,有点可怕啊...
[解决办法]
我赌 StringBuffer 高
[解决办法]
方法是有的,但是首先你不能先拼成StringBuffer,这样会导致堆内存溢出。

给你个提示,使用字符串的hashCode,压缩字符串长度,使用int基本类型来存储,以减少内存占用。

[解决办法]
500万个,要好多内存啊~
StringBuilder在构造的时候会对数据做一份copy吧
另外,从JDK目录下的src中看到的String.indexOf算法,是最低效的那种,时间复杂度O(m*n),不知道package里的字符串查找是否就是src里的代码
[解决办法]
import java.util.regex.Pattern
import java.util.regex.Matcher

用正则表达式

String line = 23756563&3000343&truetrue@23756564&3000343&truetrue@23756563&3000343&truefalse@....

Pattern p = Pattern.compile("23756583&3000343&truetrue@");
Matcher m = p.matches(line);


======================================
你自己找找。我也不太会。不过用正则保证能算出来。

热点排行