String split方法在忽略参数大小的情况下取得String[]的小技巧

本文介绍了一种在Java中使用正则表达式处理SQL语句的方法,特别是如何解决union关键字不区分大小写的问题,确保能正确地将复合查询语句拆分为独立的部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在工作中,遇到这样的情况。首先给你一个SQL语句,比如:
select * from tableA union select * from tableB
要根据关键字把两个查询语句分解出来,即得到
select * from tableA 和 select * from tableB
一般的做法是:
String sql="select * from tableA union select * from tableB";
if(sql.toLowerCase().indexOf(" union ")>-1){
String sql2[]=sql.split(" union ");
for(int i=0;i<sql2.length;i++){
System.out.println(sql2[i]);
}
}

但因为这个是SQL语句,union关键字不区分大小写的,所有sql语句有这些情况:
select * from tableA UNION select * from tableB
select * from tableA UnIOn select * from tableB
select * from tableA UNiON select * from tableB
……
所以单单用这样的语句:String sql2[]=sql.split(" union ");
是分解不出子语句的。
这里的碰到了特殊情况,我不知道别人是怎么做的,我的思路是应该有种机制sql.split(不区分大小写);
String类没提供该方法,于是我觉得先看看SUN的源码,了解它的源码
是怎么处理的,找到了:
public int indexOf(String str) {
return indexOf(str, 0);
}
public String[] split(String regex, int limit) {
return Pattern.compile(regex).split(this, limit);
}
它运用的不过是正则表达式而已,幸好这几天对正则表达式有所研究。
看看正则表达式:

DEELX 正则表达式匹配模式

IGNORECASE

-------------------------
所以我们把
String sql2[]=sql.split(" union ");
修改为
String sql2[]=sql.split(" (?i)union ");
问题即可迎刃而解。
完整的:
String sql="select * from tableA union select * from tableB";
if(sql.toLowerCase().indexOf(" union ")>-1){
String sql2[]=sql.split(" (?i)union ");
for(int i=0;i<sql2.length;i++){
System.out.println(sql2[i]);
}
}

打印结果:
select * from tableA
select * from tableB
-------------------------
re: String split方法在忽略参数大小的情况下取得String[]的小技巧[未登录] 2008-05-27 02:59 | 李敏

String sql = "select * from tableA UNION select * from tableB"
.replaceFirst("UNION", "union");
if (sql.indexOf(" union ") > -1) {
String sql2[] = sql.split(" union ");
for (int i = 0; i < sql2.length; i++) {
System.out.println(sql2[i]);
}
}

既然是无法区分大小写,不如一开始就替换掉!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值