replaceAll

忽略大小写很简,使用正则就可以实现

1
String s = "Hello word".replaceAll("(?i)hello","你好");

忽略全角半角就需要自己实现了,实现思路是把原字符串、要匹配的字符串全部转换成半角(全角),然后对转换后的字符串做 indexOf,得到 index 之后替换原字符串。

1
2
3
4
5
6
7
8
9
10
11
public static String replaceAllIgnoreHalfFull(String source, String toReplace, String replacement) {
StringBuilder sbSource = new StringBuilder(source);
StringBuilder sbSourceHalf = new StringBuilder(StringUtils.fullToHalf(source));
String searchString = StringUtils.fullToHalf(toReplace);
int idx = 0;
while((idx = sbSourceHalf.indexOf(searchString, idx)) != -1) {
sbSource.replace(idx, idx + searchString.length(), replacement);
idx += searchString.length();
}
return sbSource.toString();
}

split

原理和上面一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static List<String> split(String source,String separator){
StringBuilder sbSourceHalf = new StringBuilder(StringUtils.fullToHalf(source));
String separatorStr = StringUtils.fullToHalf(separator);
int len = separatorStr.length();
int idx = 0;
int termStart = 0;
List<String> ret = new ArrayList<>();
while((idx = sbSourceHalf.indexOf(separatorStr, idx)) != -1) {
String term = source.substring(termStart,idx);
ret.add(term);
idx += separatorStr.length();
termStart = idx;
}

ret.add(source.substring(termStart));
return ret;
}