只需要实例化 类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();
  }
  
 }


能实现这个目的,谢谢了。

那么,问题继续:上面是将字符串匹配取出标志位,下面一个问题将用到标志位。

场景:原始字符串为:LKSJDI(LKJSD)LSIDJ(KIKS)LSK(LKDL)LKDSJ,现在我仅知道里面有括号并且知道括号内有一已知字符串KJS,括号的对数不清楚,我怎么去根据KJS去取出LKJSD(即括号内的内容)并且将其内容替换为另一个字符串NEWSTRING,即替换后的字符串为:LKSJDI(NEWSTRING)LSIDJ(KIKS)LSK(LKDL)LKDSJ

方法有很多种,我这是其一,比较简单,没有用到超纲知识。

我想你是一名java初学者吧。建议你多看API

java.lang.String 里的方法很多 足够你用的


Java全部匹配才替换 java字符串完全匹配_字符串

 

测试结果截图:


Java全部匹配才替换 java字符串完全匹配_i++_02

 


public class Test19{
  
  public static void main(String[] args){
   Matching m = new Matching();
   
   System.out.println("问题①: 在orgStr中搜寻subStr所在的位置的下标数组 \n"
   +"如:在orgStr[ALSKLSHF KDLLS]中搜寻subStr[LS],返回{1,4,11} \n");
   System.out.println("...\n");
   System.out.println("测试结果:");
   
   String s1 = "ALSKLSHFKDLLS";
   String s2 = "LS";
   String s3 = null; 
   m.setOrgStr(s1);
   m.setSubStr(s2);
   System.out.println("原始字符串: "+s1);
   System.out.println("索引字符串: "+s2);
   System.out.println("索引坐标: "+m.getIndexOfString());
   System.out.println("----------------------------------------------------");
    System.out.println("问题②: 原始字符串为:LKSJDI(LKJSD)LSIDJ(KIKS)LSK(LKDL)LKDSJ,\n"
    +"现在我仅知道里面有括号并且知道括号内有一已知字符串KJS,\n"
    +"括号的对数不清楚,我怎么去根据KJS去取出LKJSD(即括号内的内容)\n"
    +"并且将其内容替换为另一个字符串NEWSTRING,即替换后的字符串为:\n"
    +"LKSJDI(NEWSTRING)LSIDJ(KIKS)LSK(LKDL)LKDSJ \n");
   
   System.out.println("...\n");
   System.out.println("测试结果:");
    
   s1 = "LKSJDI(LKJSD)LSIDJ(KIKS)LSK(LKDL)LKDSJ";
   s2 = "("; 
   m.setOrgStr(s1);
   m.setSubStr(s2);
   System.out.println("原始字符串: "+s1);
   System.out.println("索引字符串: "+s2);
   int[] a = m.getIndexOfIntArray ();
   System.out.println("索引坐标: "+m.getIndexOfString());
   s2 = ")";
   m.setSubStr(s2);
   System.out.println("索引字符串: "+s2);
   int[] b = m.getIndexOfIntArray ();
   System.out.println("索引坐标: "+m.getIndexOfString());
   String[] sub = m.getSubString(a,b);
   System.out.println("包含()"+"的字符串数组:");
   for(int i=0;i<sub.length;i++){
    System.out.println("\t\t"+sub[i]);
   }
   s2 = "KJS";
   m.setSubStr(s2);
   System.out.println("索引字符串: "+s2);
   String[] s = m.getSubString(sub);
   System.out.println("包含"+s2+"的字符串数组:");
   for(int i=0;i<s.length;i++){
    System.out.println("\t\t"+s[i]);
   }
   s2 = "NEWSTRING";
   System.out.println("替换字符串: "+s2);
   m.setSubStr(s2);
   System.out.println("替换后新的字符串:"+m.getStringOfReplaced(s));
   System.out.println("----------------------------------------------------");
  }
 }
 class Matching{
  
  String orgStr ="";
  String subStr ="";
  
  public void setOrgStr(String orgStr){
   this.orgStr = orgStr;
  }
  
  public void setSubStr(String subStr){
   //处理部分转义字符...
   if(subStr.equals ("(")||subStr.equals (")")
    ||subStr.equals (".")||subStr.equals ("|")){
    subStr="\\"+subStr;
   }
   this.subStr = subStr;
  }
  //方法 public String replaceAll(String oldStr, String newStr)  为字符串替换
  //这里的 newStr为subStr
  public String getStringOfReplaced(String[] oldStr){
   String s = null;
   if(oldStr!=null){
    int size = oldStr.length;
    for(int i=0;i<size;i++){
     
     //根据KJS去取出LKJSD(即括号内的内容)并且将其内容替换为另一个字符串NEWSTRING
     //因为是替换目标括号里的内容 并不包括括号  
     //所以要把括号先去掉  --截取子字符串
     String old = oldStr[i].substring (1,oldStr[i].length ()-1);
     s = orgStr.replace (old,subStr);
    }
   }
   return s;
  }
  
  public String[] getSubString(String[] sub){
   String[] s=null;
   int lg = 0;  //字符串数组S的长度
   if(sub!=null){
    int size = sub.length;   
    for(int i=0;i<size;i++){ 
    //sub[i]包含子字符串subStr  即括号内是否包含有 KJS 
     if(sub[i].contains (subStr)){
      lg++;
     }
    }
  //  System.out.println("包含KJS的子字符串个数:"+lg);
    if(lg>0){//存在 KJS
     s = new String[lg];
     for(int i=0;i<lg;i++){
      int j = 0;
      //循环遍历 若存在 subStr:KJS 终止当前循环 赋值  再接着循环...     
      while(sub[j].contains (subStr)){
       s[i] = sub[j];
       j++;
      }
     }     
    }  
   }  
   return s;
  }
  
  //获取子字符串  --a:开始位置  b:结束位置
  public String[] getSubString(int[] a,int[] b){
   String[] sub=null;
   if(a!=null&&b!=null){
    int size = a.length;
    if(b.length==size){
     sub = new String[size];
     for(int i=0;i<size;i++){
      //String.substring(int a,int b)  不包括b  所以要加1
      sub[i] = orgStr.substring (a[i],b[i]+1);
     }
    }
   }
   
   return sub;
  }
  
  
  //获取索引下标  --整形数组
  public int[] getIndexOfIntArray(){
   
   //根据关键字subStr来拆分字符串orgStr所得的字符串数组
   String[] sub = orgStr.split(subStr);      int keyLength = subStr.length();    //关键字长度
   if(subStr.contains ("\\"))//转义字符  多加了个'\' 所以长度要减1
    keyLength--; 
   
   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;   
   }
   return  index;
   
  }
  
  //获取索引下标 --字符串 
  public String getIndexOfString(){
   
   StringBuffer sb = new StringBuffer("{");
   int[] index = getIndexOfIntArray();
   int keySize = index.length;
   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();
  }
  
 }