2017-08-13 25 views
0

質問があります。私は、文字列、この文字列に複製したい文字、そして数字を何回複製したいのかをユーザーから聞かせる練習に苦労しています。例:文字列入力:dog;文字:o;番号:4。出力:doooog。私の質問は、私はこの結果をどのように達成できるのだろうか?あなたは、Java 8を使用している場合は、String.joinを使用して、次のように置き換えることができます文字列javaの特定の文字を繰り返す

Scanner sc = new Scanner(System.in); 

System.out.println("enter your string"); 
String text = sc.nextLine(); 

System.out.println("enter the character that will be repeated"); 
char character= sc.next().charAt(0); 

System.out.println("enter the number of repetitions"); 
int repetitions = sc.nextInt(); 

for (int i = 0; i < text.length(); i++) { 
    char z = text.charAt(i); 
    if(z==character) { 
     // repeat character in string put by user * repetitions 
    } 
} 
System.out.println(text); 

答えて

2

String str = "dog"; 
int length = 4; 
String s = "o"; 
str = str.replace(s, String.join("", Collections.nCopies(length, s)));// doooog 

は以下を挿入し、あなたのコードを完了するために、よりおよそCollections::nCopies

0

をお読みください。

String ans=""; 
for (int i = 0; i < text.length(); i++) { 
    char z = text.charAt(i); 
    if(z==character) { 
     for(int j=0;j<repetitions;j++) 
      ans+=z; 
    } 
    else 
     ans+=z; 
} 

しかし、これを行うにははるかにエレガントな方法があります:

String replacement=""; 
for(int i=0;i<repetitions;i++) 
    replacement+=character; 
String ans = text.replaceAll(String.valueOf(character), replacement); 
0

以下の作業をする必要があります:

StringBuilder buffer = new StringBuilder(); 
    for (int i = 0; i < text.length(); i++) { 
        char z = text.charAt(i); 
        if(z==character) { 
         // repeat character in string put by user * repetitions 
         for (int j=1;j<=repetitions;j++){ 
          buffer.append(z); 
         } 
        }else{ 
         buffer.append(z); 
        } 
       } 
System.out.println(buffer.toString()); 
0

あなたがJava 8を使用していない場合、あなたはこれを試すことができます。私たちは私たちが望むの文字の代わりに、ループを繰り返すString.formatを使用しているこのソリューションで

StringBuilder builder = new StringBuilder(); 
String repetitionString = String.format("%" + repetitions + "s", character).replace(' ', character); 
for (int i = 0; i < text.length(); i++) { 
    char z = text.charAt(i); 
    builder.append(z == character ? repetitionString : z); 
} 

text = builder.toString(); 
System.out.println(text); 

String.format("%" + repetitions + "s", z).replace(' ', z) 

これは、我々は*演算子を使用してPythonに何ができるかに似ている、つまり倍のz必要な数の文字を繰り返すことになります

z * repeatitions 

ループを回避できるもう1つのアプローチは、String.replace()メソッドを使用しています。

String repetitionString = String.format("%" + repetitions + "s", character).replace(' ', character); 
text = text.replace(String.valueOf(character), repetitionString); 
System.out.println(text); 
関連する問題