求 JAVA 字符串匹配 完美算法
在orgStr中搜寻subStr所在的位置的下标数组
如:在orgStr[ALSKLSHF KDLLS]中搜寻subStr[LS],返回{1,4,11}
追问:能实现这个目的,谢谢了。那么,问题继续:上面是将字符串匹配取出标志位,下面一个问题将用到标志位。
场景:原始字符串为:LKSJDI(LKJSD)LSIDJ(KIKS)LSK(LKDL)LKDSJ,现在我仅知道里面有括号并且知道括号内有一已知字符串KJS,括号的对数不清楚,我怎么去根据KJS去取出LKJSD(即括号内的内容)并且将其内容替换为另一个字符串NEWSTRING,即替换后的字符串为:LKSJDI(NEWSTRING)LSIDJ(KIKS)LSK(LKDL)LKDSJ
答案:只需要实例化 类Matching 设置参数 并调用m.getIndex()方法就OK 请测试...
public class Test18{
public static void main(String[] args){
Matching m = new Matching();
m.setOrgStr("ALSKLSHFKDLLS");
m.setSubStr("LS");
System.out.println(m.getIndex());
}
}
class Matching{
String orgStr ="";
String subStr ="";
public void setOrgStr(String orgStr){
this.orgStr = orgStr;
}
public void setSubStr(String subStr){
this.subStr = subStr;
}
public String getIndex(){
StringBuffer sb = new StringBuffer("{");
//根据关键字subStr来拆分字符串orgStr所得的字符串数组
String[] sub = orgStr.split(subStr);
int keyLength = subStr.length(); //关键字长度
int keySize = 0; //关键字个数
int subSize = sub.length; //子字符串个数
int subLength = 0; //子字符串长度
if(!orgStr.endsWith(subStr)){
keySize = subSize-1;
}else
keySize = subSize;
int[] index = new int[keySize];//关键字下标数组
for(int i=0;i<keySize;i++){
subLength = sub[i].length();
if(i==0){
index[i]=subLength;
}else
index[i]=index[i-1]+subLength+keyLength;
}
if(keySize>0){
int l = keySize-1;
for(int i=0;i<l;i++){
sb.append(index[i]+",");
}
sb.append(index[l]);//最后一个关键字下标
}else{
sb.append("NULL");
}
sb.append("}");
return sb.toString();
}
}
上一个:php 和 java 的不同之处
下一个:JAVA课程设计 彩票号码产生器