3

をパラメーターとして受け取り、正規表現を使用せずに、繰り返される隣接する文字のすべてのインスタンスをその文字の単一のインスタンスに置き換えることによって取得されStringた new を返す静的メソッドを作成する必要があります。Stringたとえば、「maaaakkee」を として入力するとString、「make」が返されます。すでに次のコードを試しましたが、最後の文字が表示されないようです。これが私のコードです:

import java.util.Scanner;
public class undouble {
    public static void main(String [] args){
        Scanner console = new Scanner(System.in);
        System.out.println("enter String: ");
        String str = console.nextLine();
        System.out.println(removeSpaces(str));
    }
public static String removeSpaces(String str){
    String ourString="";
    int j = 0;
    for (int i=0; i<str.length()-1 ; i++){
        j = i+1;
        if(str.charAt(i)!=str.charAt(j)){
            ourString+=str.charAt(i);
        }

    }

    return ourString;
    }
}
4

13 に答える 13

42

そのために正規表現を使用できます。

例えば:

String input = "ddooooonnneeeeee";
System.out.println(input.replaceAll("(.)\\1{1,}", "$1"));

出力:

done

パターン説明:

  • "(.)\\1{1,}"(グループ 1 に追加された) 任意の文字を意味し、その後に少なくとも 1 回はそれ自体が続きます。
  • "$1"グループ 1 の内容を参照
于 2013-11-01T16:04:55.840 に答える
4

多分:

for (int i=1; i<str.length() ; i++){
    j = i+1;
    if(str.charAt(i)!=str.charAt(j)){
        ourString+=str.charAt(i);
    }
}
于 2013-11-01T16:03:47.113 に答える
0

問題はあなたの状態にあります。各反復で i と i+1 を比較すると言い、最後の反復では i と j の両方が同じ場所を指しているため、最後の文字が出力されることはありません。これを達成するために正規表現を使用したくない場合は、これを試してください:

編集:

public  void removeSpaces(String str){
        String ourString="";
        for (int i=0; i<str.length()-1 ; i++){
            if(i==0){
                ourString = ""+str.charAt(i);
            }else{
                if(str.charAt(i-1) != str.charAt(i)){
                    ourString = ourString +str.charAt(i);
                }
            }           
        }
        System.out.println(ourString);
    }
于 2013-11-01T16:08:13.680 に答える
0
public static void remove_duplicates(String str){
    String outstr="";
    String outstring="";
    for(int i=0;i<str.length()-1;i++) {
    if(str.charAt(i)!=str.charAt(i+1)) {
        outstr=outstr+str.charAt(i);
        }
        outstring=outstr+str.charAt(i);
        }
        System.out.println(outstring);
    }
于 2018-08-10T12:11:07.823 に答える
-2

public static String removeDuplicates(String str) {

    String str2 = "" + str.charAt(0);
    for (int i = 1; i < str.length(); i++) {
        if (str.charAt(i - 1) == str.charAt(i) && i != 0) {
            continue;
        }
        str2 = str2 + str.charAt(i);
    }
    return str2;
}
于 2016-05-01T16:07:25.697 に答える