从java中除第一个和最后一个之外的字符串中删除所有出现的子字符串

时间:2015-08-04 08:53:28

标签: java

是java有任何选项,例如从第1次和最后一次出现的字符串中删除所有出现的子字符串,例如

String sdata =“vijay已经10岁了.vijay正在五年级学习.vijay在体育方面非常出色。像板球一样,vijay”

我需要一个输出,比如“vijay已经10岁了。正在五年级学习。在体育方面非常出色。像板球一样很棒”

这意味着删除vijay的第二次和第三次出现。 java有没有内置函数?

3 个答案:

答案 0 :(得分:2)

这是一个非常具体的要求,所以答案是:不,Java没有任何标准功能。

我的建议:使用indexOflastIndexOf找到第一次和最后一次出现,拆分字符串,使用replaceAll去除中间部分的所有出现,并连接一切都在一起。

如果您无法自行解决此问题,请使用您的代码和特定问题/问题更新问题。

答案 1 :(得分:0)

不,不。 你可以尝试这样的事情:

String s = "vijay is 10 yr old. vijay is studying in 5th grade. vijay is excellent in sports.vijay like cricket";
String token = "vijay";
StringTokenizer st = new StringTokenizer(s,token);
int count = 0;
while ( st.hasMoreElements() )
{
  String temp = st.nextToken();
  if(count == 0 || count == (st.countTokens() - 1)
  {
    //your code
  }else{
   //your code
  }
 count ++;
}

答案 2 :(得分:0)

正如Jan所说,特定的事情是安静的。有很多Java方法和库,但不是那么具体。所以我给你做了一个示例答案,通过遍历数组来展示你如何解决这个问题,它就是这样做的。

  1. 浏览char数组并替换与您要搜索的字符串匹配的值。
  2. 将第一次出现的查找字符串放回主字符串中。
  3. 将最后一次出现的查找字符串放回主字符串中。
  4. 删除所有剩余的特殊字符。

    private void start(){

    String origanlString = "vijay is 10 yr old. vijay is studying in 5th grade. vijay is excellent in sports. vijay like cricket.";
    String toFind = "vijay";
    char deliminator = 'X';     //      '\u0000'
    char[] orig = origanlString.toCharArray();
    char[] find = toFind.toCharArray();
    System.out.println("orig length:"+orig.length);
    System.out.println("find length:"+find.length+"\n");
    
    System.out.println("[0] ***"+String.valueOf(orig)+"***("+orig.length+")chars");
    
    //  1.  Iterate over the array to be searched
    for(int i=0;i<orig.length;i++){
    
        //  If letter found equals the first letter of the toFind array, then check the rest of the characters
        Boolean matchFound = true;
        if(find[0]==orig[i]){               
            wordCheckLoop:
            for(int x=0;x<find.length;x++){
                if(orig[i+x]!=find[x]){
                    matchFound = false;
                    break wordCheckLoop;
                }
            }
            //  Replace found string with place holders
            if(matchFound){
                for(int x=0;x<find.length;x++){
                    orig[i+x] = deliminator;
                }
            }
        }
    }
    System.out.println("[1] ***"+String.valueOf(orig)+"***("+orig.length+")chars");
    
    //  2.  Replace the first occurance
    int count = 0;
    Boolean firstInst = true;
    replaceFirst:
    for(int i=0;i<orig.length;i++){
        try{
            if(orig[i]==deliminator&&firstInst){
                orig[i]=find[count++];
                if(orig[i+1]!=deliminator){
                    firstInst = false;
                }
            }
        }catch(ArrayIndexOutOfBoundsException  ex){
            break replaceFirst;
        }
    }
    System.out.println("[2] ***"+String.valueOf(orig)+"***("+orig.length+")chars");
    
    //  3.  Replace the last occurance
    firstInst = true;
    count = find.length-1;
    replaceLast:
    for(int i=orig.length-1;i>0;i--){
        try{
            if(orig[i]==deliminator&&firstInst){
                orig[i]=find[count--];
                if(orig[i-1]!=deliminator){
                    firstInst=false;
                }
            }
        }catch(ArrayIndexOutOfBoundsException ex){
            System.out.println("ArrayIndexOutOfBoundsException");
            break replaceLast;
        }
    }
    System.out.println("[3] ***"+String.valueOf(orig)+"***("+orig.length+")chars");
    
    //  4.  Remove all remaining occurances of special charactor
    count = 0;
    for(int i=0;i<orig.length;i++){
        if(orig[i]==deliminator){
            count++;
        }
    }
    char[] tempArray = new char[orig.length-count];
    count = 0;
    for(int i=0;i<orig.length;i++){
        if(orig[i]!=deliminator){
            tempArray[count++] = orig[i];
        }
    }
    System.out.println("[4] ***"+String.valueOf(tempArray)+"***("+tempArray.length+")chars");
    }