最近我做一个日志框架的开发,为了对性能进行优化,我要获取字符串的开始位置和结束位置来做替换。所以我就遇到了这个问题,没找到好的API,没办法,只能自己写了。
我直接将工具类的代码copy出来,给有需要用的人:
/**
* 获取一个字符串的开始位置和结束位置
*
* @param v 源字符串
* @param find 需要查找的字符串
* @return 数组 0=开始位置 1=结束位置
*/
public static int[] getStringStartAndEndIndex(String v, String find) {
int start = -1; // 开始下标
int end = -1; // 结束下标
int currentIndex = 0; // 当前下标 -1等于当前源字符串长度已遍历完
char[] source = v.toCharArray(); // 源字符串char数组
char[] target = find.toCharArray();
while (source.length >= currentIndex) {
boolean result = true;
for (int i = 0; i < target.length; i++) {
if (source[currentIndex] == target[i]) {
result = true;
}else{
result = false;
currentIndex++;
break;
}
currentIndex++;
}
if (result) {
start = currentIndex - target.length;
end = currentIndex;
break;
}
}
return new int[]{start, end};
}
使用方法:
public static void main(String[] args){
String v = "class method line";
// 返回一个数组,0是开始位置,1是结束位置
char[] indexes = getStringStartAndEndIndex(v,"method")
System.out.println("开始位置:"+indexes[0]+",结束位置:"+indexes[1]);
}
我的工具类还定义了很多关于String的操作,代码连接: