2017-08-13 79 views
0

我有一個問題。我正在努力進行一項練習,在練習中,我被要求從用戶那裏獲得一個字符串,一個我想在此字符串中複製的字符以及一個數字 - 我要複製多少次。例如:字符串輸入:狗;字符:o;數量:4。輸出:doooog。我的問題是我怎樣才能達到這個結果?重複字符串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

如果您使用的是Java 8中,您可以使用String.join和替換這樣的:

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你可以試試這個。

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的重複,我們要的不是一個循環的字符。

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

這類似於我們在Python使用*運營商做的,即

z * repeatitions 

將重複字符z要求的次數。

您可以避免循環的另一種方法是使用String.replace()方法。

String repetitionString = String.format("%" + repetitions + "s", character).replace(' ', character); 
text = text.replace(String.valueOf(character), repetitionString); 
System.out.println(text);