jive中StringUtils的一些方法的研究

我们经常在代码中使用String的replace方法和replaceAll方法,但JDK的类调用比较复杂,下面我们看看jive中的实现:

public static final String replace(String line, String oldString,
String newString) {
if (line == null) {
return null;
}
int i = 0;
if ((i = line.indexOf(oldString, i)) >= 0) {
char[] line2 = line.toCharArray();
char[] newString2 = newString.toCharArray();
int oLength = oldString.length();
StringBuffer buf = new StringBuffer(line2.length);
buf.append(line2, 0, i).append(newString2); //拷贝串开始到目标字符出现的字符,再加上要替换的字符
i += oLength;
int j = i;
//查找后面出现的原字符
while ((i = line.indexOf(oldString, i)) > 0) {
//拷贝两次出现的中间的字符,再加上要替换的字符
buf.append(line2, j, i - j).append(newString2);
i += oLength;
j = i;
}
//把最后没有替换的字符加到后面
buf.append(line2, j, line2.length - j);
return buf.toString();
}
return line;
}

理解了上面的代码,再理解忽略大小写的代码就容易多了。

private static String replaceIngoreCase(String line,String oldString,String newString){
if(line == null){
return null;
}
int i = 0;
String lcLine = line.toLowerCase();
String lcOldString = oldString.toLowerCase();
if((i = lcLine.indexOf(lcOldString,i)) != -1){
char[] line2 = line.toCharArray();
char[] newString2 = newString.toCharArray();
StringBuffer buf = new StringBuffer(line2.length);
int oLength = oldString.length();
buf.append(line2,0,i).append(newString2);
i += oLength;
int j = i;
while((i = lcLine.indexOf(lcOldString,i)) != -1){
buf.append(line2,j,i - j).append(newString2);
i += oLength;
j = i;
}
buf.append(line2,j,line2.length - j);
return buf.toString();
}
return line;
}

主要是将要替换的串,和源字符转为小写,替换为目标字符,思路很上面的差不多。
还有一些经常使用的一些比如HTML、XML一些特殊字符的一些过滤:

public static final String escapeHTMLTags(String in) {
if (in == null) {
return null;
}
char ch;
int i=0;
int last=0;
char[] input = in.toCharArray();
int len = input.length;
StringBuffer out = new StringBuffer((int)(len*1.3)); //这里的初始化容量,初步为原来的1.3倍。
for (; i < len; i++) {
ch = input[i];
if (ch > '>') {
continue;
} else if (ch == '<') {
if (i > last) {
out.append(input, last, i - last);
}
last = i + 1;
out.append(LT_ENCODE); // LT_ENCODE="<"
} else if (ch == '>') {
if (i > last) {
out.append(input, last, i - last);
}
last = i + 1;
out.append(GT_ENCODE); // GT_ENCODE = ">"
}
}
if (last == 0) {
return in;
}
if (i > last) { //直接拷贝后面的非HTML字符
out.append(input, last, i - last);
}
return out.toString();
}

方法看起来还是比较简单的。
那我们在看看关于XML替换的,在XML中&也也是一个特殊字符,

public static final String escapeForXML(String in) {
if (in == null) {
return null;
}
char ch;
int i=0;
int last=0;
char[] input = in.toCharArray();
int len = input.length;
StringBuffer out = new StringBuffer((int)(len*1.3));
for (; i < len; i++) {
ch = input[i];
if (ch > '>') {
continue;
} else if (ch == '<') {
if (i > last) {
out.append(input, last, i - last);
}
last = i + 1;
out.append(LT_ENCODE);
} else if (ch == '&') {
if (i > last) {
out.append(input, last, i - last);
}
last = i + 1;
out.append(AMP_ENCODE); // AMP_ENCODE = "&"
} else if (ch == '"') {
if (i > last) {
out.append(input, last, i - last);
}
last = i + 1;
out.append(QUOTE_ENCODE);
}
}
if (last == 0) {
return in;
}
if (i > last) {
out.append(input, last, i - last);
}
return out.toString();
}

方法差不多.
[color=red][size=medium]
其实在实际编程过程中我们经常使用commones-utils.jar里面的StringUtil,或者Spring里面带的一些Util方法,或者社区里面一些爱好者写的Util类,只要大概知道他们是怎么实现的,用他们的还是可以节省很多时间。
[/size][/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值