- 浏览: 425726 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
xiesbao:
找到了,太坑爹了。
Intellij Idea 滚动条跳动的问题 -
hvang1988:
按照你说的例子,主备说的是dbtest1,dbtest2,db ...
阿里开源Mysql分布式中间件:Cobar -
hvang1988:
问个问题:一个数据库的表的全部数据只分布在一个cobar上。多 ...
阿里开源Mysql分布式中间件:Cobar -
SiKing:
多谢,一直被这个问题困扰
Intellij Idea 滚动条跳动的问题 -
guodage003:
多谢 解决了这个蛋疼的问题。。
Intellij Idea 滚动条跳动的问题
引用
在做采集时,使用的是自己的API(过几天发布)做数据采集,没有使用他人写API(因为他们使用大部分是采用DOM结构和一些优化功能,在配置上有些不方便)。在字符串查找上,很重要一个是不区分大小写的查找,而java的api中没有直接提供这个方法,所以自己写,分别是模仿indexOf()和lastIndexOf(),大家踊跃指教,代码如下:
public class StringUtil { public static void main(String[] args) { String t="aaaaaaaaaa<table></table>aaa<table></table>"; String s="<TABLE"; // t=""; System.out.println("length="+t.length()); System.out.println(t.indexOf(s,0)); System.out.println(ignoreCaseIndexOf(t, s,0)); System.out.println(t.lastIndexOf(s)); System.out.println(ignoreCaseLastIndexOf(t, s)); } /** * 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始,不区分大小。 * * @param subject 被查找字符串。 * @param search 要查找的子字符串。 * @return 指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 */ public static int ignoreCaseIndexOf(String subject, String search) { return ignoreCaseIndexOf(subject, search,-1); } /** * 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始,不区分大小。 * * @param subject 被查找字符串。 * @param search 要查找的子字符串。 * @param fromIndex 开始查找的索引位置。其值没有限制,如果它为负,则与它为 0 的效果同样:将查找整个字符串。 * 如果它大于此字符串的长度,则与它等于此字符串长度的效果相同:返回 -1。 * @return 指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 */ public static int ignoreCaseIndexOf(String subject, String search, int fromIndex) { //当被查找字符串或查找子字符串为空时,抛出空指针异常。 if (subject == null || search == null) { throw new NullPointerException("输入的参数为空"); } fromIndex = fromIndex < 0 ? 0 : fromIndex; if (search.equals("")) { return fromIndex >= subject.length() ? subject.length() : fromIndex; } int index1 = fromIndex; int index2 = 0; char c1; char c2; loop1: while (true) { if (index1 < subject.length()) { c1 = subject.charAt(index1); c2 = search.charAt(index2); } else { break loop1; } while (true) { if (isEqual(c1, c2)) { if (index1 < subject.length() - 1 && index2 < search.length() - 1) { c1 = subject.charAt(++index1); c2 = search.charAt(++index2); } else if (index2 == search.length() - 1) { return fromIndex; } else { break loop1; } } else { index2 = 0; break; } } //重新查找子字符串的位置 index1 = ++fromIndex; } return -1; } /** * 返回指定子字符串在此字符串中最右边出现处的索引。 * * @param subject 被查找字符串。 * @param search 要查找的子字符。 * @return 在此对象表示的字符序列中最后一次出现该字符的索引;如果在该点之前未出现该字符,则返回 -1 */ public static int ignoreCaseLastIndexOf(String subject, String search){ if(subject==null){ throw new NullPointerException("输入的参数为空"); } else{ return ignoreCaseLastIndexOf(subject,search,subject.length()); } } /** * 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向查找。 * @param subject 被查找字符串 。 * @param search 要查找的子字符串。 * @param fromIndex 开始查找的索引。fromIndex 的值没有限制。如果它大于等于此字符串的长度,则与它小于此字符串长度减 1 的效果相同:将查找整个字符串。 * 如果它为负,则与它为 -1 的效果相同:返回 -1。 * @return 在此对象表示的字符序列(小于等于 fromIndex)中最后一次出现该字符的索引; * 如果在该点之前未出现该字符,则返回 -1 */ public static int ignoreCaseLastIndexOf(String subject, String search, int fromIndex) { //当被查找字符串或查找子字符串为空时,抛出空指针异常。 if (subject == null || search == null) { throw new NullPointerException("输入的参数为空"); } if (search.equals("")) { return fromIndex >= subject.length() ? subject.length() : fromIndex; } fromIndex = fromIndex >= subject.length() ? subject.length() - 1 : fromIndex; int index1 = fromIndex; int index2 = 0; char c1; char c2; loop1: while (true) { if (index1 >= 0) { c1 = subject.charAt(index1); c2 = search.charAt(index2); } else { break loop1; } while (true) { //判断两个字符是否相等 if (isEqual(c1, c2)) { if (index1 < subject.length() - 1 && index2 < search.length() - 1) { c1 = subject.charAt(++index1); c2 = search.charAt(++index2); } else if (index2 == search.length() - 1) { return fromIndex; } else { break loop1; } } else { //在比较时,发现查找子字符串中某个字符不匹配,则重新开始查找子字符串 index2 = 0; break; } } //重新查找子字符串的位置 index1 = --fromIndex; } return -1; } /** * 判断两个字符是否相等。 * @param c1 字符1 * @param c2 字符2 * @return 若是英文字母,不区分大小写,相等true,不等返回false; * 若不是则区分,相等返回true,不等返回false。 */ private static boolean isEqual(char c1,char c2){ // 字母小写 字母大写 if(((97<=c1 && c1<=122) || (65<=c1 && c1<=90)) && ((97<=c2 && c2<=122) || (65<=c2 && c2<=90)) && ((c1-c2==32) || (c2-c1==32))){ return true; } else if(c1==c2){ return true; } return false; } }
评论
4 楼
沙漠绿树
2011-01-10
zluyuer 写道
沙漠绿树 写道
zluyuer 写道
2个字符串都toLowerCase然后调用indexOf就可以了
你说的这种方法可以查找到。可能是我这篇文章没有写明是在什么情况使用。在做网页采集时,提取网页里面的信息,是不能把源码大小转换的,不然采集的信息就有错误。网页是怎么写,我们必须保持原样,在这种情况下,我们要做不区分大小写查找,我这种方法是可以实现的。
toLowerCase是生成新的字符串,你找到子串的位置就行了,原来的串不变嘛,原样采集
你的方法是可以。你这样就相当于相同的网页源码在内存中保存了两份,当你做大量采集时,内存资源是很宝贵的。虽然你转换后,字符的比较上要少一种情况,减少了时间,但是在换上也耗费了时间。
3 楼
zluyuer
2011-01-10
沙漠绿树 写道
zluyuer 写道
2个字符串都toLowerCase然后调用indexOf就可以了
你说的这种方法可以查找到。可能是我这篇文章没有写明是在什么情况使用。在做网页采集时,提取网页里面的信息,是不能把源码大小转换的,不然采集的信息就有错误。网页是怎么写,我们必须保持原样,在这种情况下,我们要做不区分大小写查找,我这种方法是可以实现的。toLowerCase是生成新的字符串,你找到子串的位置就行了,原来的串不变嘛,原样采集
2 楼
沙漠绿树
2010-10-14
zluyuer 写道
2个字符串都toLowerCase然后调用indexOf就可以了
你说的这种方法可以查找到。可能是我这篇文章没有写明是在什么情况使用。在做网页采集时,提取网页里面的信息,是不能把源码大小转换的,不然采集的信息就有错误。网页是怎么写,我们必须保持原样,在这种情况下,我们要做不区分大小写查找,我这种方法是可以实现的。
1 楼
zluyuer
2010-07-23
2个字符串都toLowerCase然后调用indexOf就可以了
发表评论
-
深入理解Java内存模型
2014-11-08 16:54 986深入理解Java内存模型(一)——基础深入理 ... -
阿里开源Mysql分布式中间件:Cobar
2014-08-12 11:54 64360这几天研究 ... -
今日开源介绍:Google Guava、Google Guice、Joda-Time
2014-08-11 11:55 18195一、Guava 是一个 Google 的基于java1.6的 ... -
Jackson 动态过滤属性
2014-06-20 16:15 2989在把java对象转换为json时,有时需要依据需求动态过滤掉 ... -
自实现CAS原理JAVA版,模拟下单库存扣减
2014-04-02 17:47 7008在做电商系统时,库存 ... -
JAVA逻辑判断工具类
2013-09-06 21:33 1699在开发过程中,经常需要对“对象”、Map、Collecti ... -
Servlet2.4 监听器
2011-06-17 17:48 1528Servlet API提供了基本的应用程序事件监听器接口。编程 ... -
JSP页面编译成Servlet类文件过程中所涉及到的编码问题
2011-02-23 12:16 2845当请求一个JSP页面时,一般的都需要经历下面几个阶段: 1 ... -
Java中的字符集编码入门(六)Java中的增补字符
2011-02-23 12:11 1440Java号称对Unicode提 ... -
Java中的字符集编码入门(五)Java代码中的字符编码转换
2011-02-23 12:08 1116如果你是JVM的设计者,让你来决定JVM中所有字符的表 ... -
Java中的字符集编码入门(四)网页文件的编码
2011-02-23 12:03 1073接着上节的思路说,一个网页要想在浏览器中能够正确显示,需要在三 ... -
Java中的字符集编码入门(三)GB2312,GBK与中文网页
2011-02-23 12:02 1233GB2312是对中国的开发人员来说很重要的一个词汇,它的来龙去 ... -
Java中的字符集编码入门(二)编码字符集与字符集编码的区别
2011-02-23 12:01 901需要再一次强调的是, ... -
Java中的字符集编码入门(一)Unicode与UCS的历史恩怨
2011-02-23 11:59 1022ASCII及相关标准 ... -
方便管理工程中的SQL语句
2010-10-13 17:13 1785引用 之前在项目开发时候,经理要求把所有的SQL语句挑出 ... -
常见通信名称缩写解释
2010-09-03 16:05 2295引用 在看新闻时,购买手机时,经常听到关于通信方面的一 ... -
飞信维脉系统(定时短息发送系统)
2010-08-01 21:27 1559引用 因为工作原因 ... -
HTTP协议介绍
2010-07-28 09:45 791引用 HTTP(HyperTextTransferPro ... -
Java调用存储过程举例
2010-07-23 18:22 884Java调用oracle存储过程的示例总结如下。 ... -
Oracle数据库链接池
2010-04-13 17:28 1981引用 很多时候我们都要操作数据库,高效数据库操作的第一步 ...
相关推荐
主要介绍了linux grep不区分大小写查找字符串方法,需要的朋友可以参考下
编写一个程序统计文本文件英文字母个数,不区分大小写,屏幕输出每个字母出现的次数。 参考:文件操作函数,fopen, fclose, fread, fgetc;使用MSDN查找相关帮助; 要求:代码的编写、变量定义等应以《Coding ...
该函数对大小写不敏感。如需对大小写敏感的搜索,请使用 strstr()。 例子: 例子 1 复制代码 代码如下: <?php echo stristr(“Hello world!”,”WORLD”); ?> 输出: world! 例子 2 复制代码
2、输入一个字符串,统计该字符串中'a'字符(不区分大小写)的个数。 3、输入一个字符串,将该字符串中的每个字母加10后再将字符串输出。 4、输入一个由26个英文字母(不分大小写)组成的字符串,再输入一个英文字母...
/i 表示不区分大小写 可以参考help findstr的输出解释来使用此命令。 注意: findstr.exe一般在C:\Windows\System32目录下,要从任意路径调用该命令,需要将C:\Windows\System32添加到path环境变量中
Windows貌似没有提供判断字符串1是否为字符串2的子串的 API函数,我们可以DIY一个。 实现的方法很多,我们先应用ASM特有的repe cmpsb指令来实现。
vc++ 带通配符的字符串匹配算法实例源... bMatchCase为0,不区分大小写,否则区分大小写。 返回值:匹配,返回1;否则返回0。 通配符意义:‘*’代表任意字符串,包括空字符串;‘?代表任意一个字符,不能为空;
功能强大的全文查找和全文替换,包括标准字符串和 Unicode 字符串的查找和替换(可以不区分大小写)。功能强大的输入功能,支持十六进制码处理和字符输入,字符输入还包括 Unicode 字符的直接输入。无限级的 Undo 与...
strcmpi(str1,str2)——str1与str2相等返回1,否则返回0(不区分大小写); strncmp(str1,str2,n)——比较str1与str2前n个字符是否相等(区分大小写) strncmpi(str1,str2,n)——比较str1与str2前n个字符是否相等...
File String Finder能够从指定范围内查找全部或部分文件名,查找文件中的一个字符或短语,支持区分大小写,支持以文本/十六进制类型,当FileStringFinder在文件中搜索字符串时,它只读取部分文件.这些部分与你...
用户输入验证码时不区分大小写,只要各字符出现顺序正确即可通过验证。 请写一个程序完成验证码的匹配验证,假设当前显示的验证码是’Qs2X’。 如果用户输入验证码正确,输出“验证码正确”,输入错误时输出“验证码...
vc 带通配符的字符串匹配算法实例源代码... bMatchCase为0,不区分大小写,否则区分大小写。 返回值:匹配,返回1;否则返回0。 通配符意义:‘*’代表任意字符串,包括空字符串;‘?代表任意一个字符,不能为空;
函数 fzsearch(r,p,n,case) 查找字符串 r(参考)和字符串 p(模式)的子...可以搜索区分大小写和不区分大小写的情况。 搜索的结果是匹配距离和参考子串末端的索引。 为了获得最佳匹配,该函数还可以确定子字符串本身。
L = IS_STR_IN_STR(X,PATTERN,TRUE) 比较区分大小写(否则默认不区分大小写)。 使用示例: cell_test = {'黑猫'; '下大雨'; '白狗'; '黑狗'; '蓝鸟'} idx1 = is_str_in_str(cell_test, 'DOG'); idx2 = is_str_i
• 用字符串或ANSI 字符串中的另一个模式替换一个模式(一个或全部,区分大小写或不区分大小写) 平台: • 32 位和64 位窗口。 速度: • 字符串更换可以比标准快 6-9 倍。 字符串搜索增益主要在 64 位模式下...
RegScanner是一款强大的注册表扫描工具,别看它的体积小但功能上却不输同类软件,而且使用起来非常容易上手,支持区分大小写查找字符串,可匹配注册表项包含指定字符,查找注册表中的项数据或键,搜索二进制值中的...
从string_in读入数据,然后用户输入一个短字符串。要求查找string_in中和短字符串的所有匹配,输入...匹配不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。
还是只是记录下来相关位置——这是我底下未完成版本1想到的思路——用一个count[sizeof(A)]数组记录下A每个位置作为起点所能和B达到的最大重合,最后判断查找数组中最大值,此时目标子字符串的起点下标(i)和 i ...