2014-11-21 78 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