我必须写一个方法,任何时候两个相同的字母彼此相邻,两个字母都会被单词中的下一个字母替换。如果单词的最后两个字母是相同的那么字母应该被删除。例如" 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;
答案 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));
}
}
一些输入和输出如下