2014-11-21 77 views
1

我想知道是否有辦法使用String::concat帶循環,而不是使用StringBuilder/StringBuffer使用.concat循環連接而不使用循環

我試過這樣,但它不起作用。有人可以幫助解決這個問題嗎?或給我建議,所以我自己嘗試?

public class multiConcat { 
    public static void main(String[] args) { 
     int num = 0; 
     String finish = ""; 
     Scanner reader = new Scanner(System.in); 

     System.out.println("Type a word: "); 
     String state = reader.next(); 
     System.out.println("Number of Concatenation: "); 
     num = reader.nextInt(); 
     finish = state.concat(state); 

      for (int i = 0; i == num; i++) { 
       finish.concat(state); 
      } 

     System.out.println(finish); 

    } 
} 

我認爲這將是STHE AME理念爲x = x + 1,即不斷覆蓋值...

謝謝

你的意思,因爲這?

 for (int i = 0; i == num; i++) { 
      finish = finish.concat(state); 
     } 
+0

你可以發佈你所得到的錯誤?另外,第一句話有點混亂,可以考慮更清楚。 – MondKin 2014-11-21 04:43:22

+0

我沒有收到任何編譯錯誤。我試圖做的是如果我爲我的詞輸入「hi」,並且我想連接我的世界4次,所以這樣的結果就像「hihihihi」對於壞語法對不起 – 2014-11-21 04:45:36

+0

concat不會修改字符串。使用'finish = finish.concat(state);'。並刪除此行'finish = state.concat(state);' – nitish005 2014-11-21 05:08:05

回答

0

幾個變化。

1.)循環不正確。

應該如下,如果num > 1然後在循環中連接。

if (num > 1) { 
      for (int i = 0 ; i < num ; i++) { 
       finish = finish.concat(state); 
      } 
     } else { 
      finish = finish.concat(state); 
     } 

2)finish.concat(state)返回一個新字符串,所以你必須在分配到終點可變

finish = finish.concat(state); // **remember Strings are immutable** 

完整的程序

public class multiConcat { 
    public static void main(String[] args) { 
     int num = 0; 
     String finish = ""; 
     Scanner reader = new Scanner(System.in); 

     System.out.println("Type a word: "); 
     String state = reader.next(); 
     System.out.println("Number of Concatenation: "); 
     num = reader.nextInt(); 

     if (num > 1) { 
      for (int i = 0 ; i < num ; i++) { 
       finish = finish.concat(state); 
      } 
     } else { 
      finish = finish.concat(state); 
     } 

     System.out.println(finish); 

    } 
} 

輸出

Type a word: 
ankur 
Number of Concatenation: 
2 
ankurankur 


Type a word: 
ankur 
Number of Concatenation: 
1 
ankur 

Type a word: 
ankur 
Number of Concatenation: 
3 
ankurankurankur 
+0

忽略if語句抱歉...我發佈了錯誤的代碼..我正在嘗試自己的東西 – 2014-11-21 04:47:49

+0

我試圖讓它如此如果人們想要它連接不到兩次它只會輸出字 – 2014-11-21 04:49:30

+0

@JasonKim好吧,你可以爲'<2'設置一個過濾器,這些東西你可以啾啾我希望。 – 2014-11-21 04:50:16

2

finish.concat(state)返回一個新字符串,所以你必須在分配給finish變量,以便引用新的String要保持:

finish = finish.concat(state);

你已經做到這一點之前,到循環中,但在循環內部,您沒有做任何事情,返回值爲concat,因此循環沒有任何變化。

+0

@JasonKim你沒有解決for循環中的問題,我在我的答案中提到了這個問題。 – Eran 2014-11-21 04:48:48

0

您可以使用下面的代碼。

String is immutable所以你必須存儲返回的值。

String finish = new String(); 
finish = finish.concat("Any Value"); 

使用StringBuilderStringBuffer你可以做這樣

StringBuilder finish = new StringBuilder(); 
finish.append(state); 

StringBuffer finish = new StringBuffer(); 
finish.append(state); 
+0

謝謝你的答案。我將嘗試下次使用Stringbuilder和Stringbuffer:D – 2014-11-21 04:56:24

+0

沒問題。但1建議,如果你正在改變字符串值,那麼最好使用StringBuilder或Stringbuffer。因爲每次調用concat都會爲該字符串分配新的內存,因爲String是不可變的。 – 2014-11-21 04:58:25

+0

我會記住這一點,謝謝 – 2014-11-21 05:02:37