更改字符串中的重复字母

时间:2016-03-13 23:12:16

标签: java eclipse string

我必须写一个方法,任何时候两个相同的字母彼此相邻,两个字母都会被单词中的下一个字母替换。如果单词的最后两个字母是相同的那么字母应该被删除。例如" wheel"应该成为" whlll"。但是,新的重复字母不应该发生任何事情。例如,"守门员"应该打印" kppper"

这是我的尝试:

public String change(String s){
    if(s.length()>=2&&s.substring(s.length()-2,s.length()-1).equals(s.substring(s.length()-1)))
        s=s.substring(0,s.length()-2);
    if(s.length()<2)
        return s;
    String f="";
    for(int i=0; i<s.length(); i++){
        if(i+1<s.length()-1&&s.substring(i,i+1).equals(s.substring(i+1,i+2))){
            if(s.length()<4){
                f=f+s.substring(s.length()-i)+s.substring(s.length()-1);
                i=i+2;}
            else{f=f+s.substring(i+2,i+3)+s.substring(i+2,i+3);
            i=i+2;}
        }
        else {
            f=f+s.substring(i,i+1);
        }

    }
    if(f.length()<s.length())
        f=f+s.substring(s.length()-1);
    return f;
}

但是,只有在非重复字母后单词没有继续时,该方法才有效。例如&#34; keep&#34;,&#34; wheel&#34;。如果我尝试添加结尾或更多重复的字母,它不会给出正确的输出。 &#34; foodloop&#34;打印&#34; fddlppp&#34;有一个&#34; d&#34;失踪,&#34;失踪&#34;打印&#34; miiingg&#34; one&#34; i&#34;缺少和额外的&#34; g&#34;

3 个答案:

答案 0 :(得分:2)

这就是你的代码的样子:

public static String change(String s){
    if(s.length()>=2&&s.substring(s.length()-2,s.length()-1).equals(s.substring(s.length()-1)))
        s=s.substring(0,s.length()-2);
    if(s.length()<2)
        return s;
    String f="";

    for(int i=0; i<s.length(); i++){
        if((i+1<s.length()-1)&& (s.substring(i,i+1).equals(s.substring(i+1,i+2)))){
            if(s.length()<4){
                f=f+s.substring(s.length()-i)+s.substring(s.length()-1);
                i=i+2;
             }
            else{
              f=f+s.substring(i+2,i+3)+s.substring(i+2,i+3);
              i=i+1;
              }
        }
        else {
            f=f+s.substring(i,i+1);
        }

    }
    if(f.length()<s.length())
        f=f+s.substring(s.length()-1);
    return f;
}

我在这里更改了您的代码:

   else{
      f=f+s.substring(i+2,i+3)+s.substring(i+2,i+3);
      i=i+2;
   } 

到:

else{
    f=f+s.substring(i+2,i+3)+s.substring(i+2,i+3);
    i=i+1;
}

答案 1 :(得分:0)

这不是直接解决问题。并且它不处理未指定的某些细节(例如,空格,大写,三元组)。但是......正则表达式呢?

public String change(String s) {
    return s.replaceAll("([a-z])\\1([a-z])", "$2$2$2");
}

答案 2 :(得分:-1)

您的代码很难理解。在这里,我附上了一个代码,它将从控制台输入一个单词,如果它们连续出现两次,将替换任何字符。

import java.util.Scanner;

public class TwoRepeatedLetter {

    public static void main(String args[]){
        String word;
        Scanner sc = new Scanner(System.in);

        while(sc.hasNext()){
        word=sc.next();
        getRepeatedReplaced(word);
        }
        sc.close();

    }

    public static void getRepeatedReplaced(String s){
        String result="";
        if(s.length()<2)
            result=s;
        if(s.charAt(s.length()-2)==s.charAt(s.length()-1))
        {
            result=s.substring(0,s.length()-2);
            s=result;
        }
        char []saschar=s.toCharArray();
        for(int i=1;i<s.length();i++){

            if(saschar[i-1]==saschar[i]){
                saschar[i-1]=saschar[i+1];
                saschar[i]=saschar[i+1];
                i=i+2;
            }


        }

        System.out.println(String.valueOf(saschar));
    }
}

一些输入和输出如下

  • toop tppp
  • loop lppp
  • looooop loooppp
  • wheel whlll
  • chuul chlll