2017-09-06 283 views
2

我们的任务是编写一个代码来连接两个字符串,只使用charAt。所以我所做的是以下几点:Java将两个字符串连接在一起charAt

Scanner sc = new Scanner (System.in); 
char operation = sc.nextLine().charAt(0) 
String c = "concatenation"; 
if (operation == 'c') { 
     System.out.println("Please enter the first string: "); 
     String firstString = sc.next(); 
     System.out.println("Please enter the scond string: "); 
     String secondString = sc.next(); 

     System.out.print("The result of concatenating " + firstString + " and " + secondString + " is "); 
     for (int i = 0; i < firstString.length(); i++) { 
      char x = firstString.charAt(i); 
      System.out.print(x); 
     } 
     for (int i = 0; i < secondString.length(); i++) { 
      char y = secondString.charAt(i); 
      System.out.print(y); 
     } 
    } 

我的老师告诉我下面的:“所以您目前简单的打印,但我们的目标是创建一个新的字符串,这既是S1和S2的级联...然后你打印你创建的新字符串,所以使用charAt是要走的路,但是一次不打印一个字符,你需要一次连接一个字符。

所以我想也许这样的事情可以工作:

String concatenated; 
    for (int i = 0; i < firstString.length(); i++){ 
     concatenated = firstString.charAt(i); 
    } 

显然事实并非如此,因为不兼容的类型。

所以我想问你我可能做些什么,只用charAt连接两个字符串。

+1

我不知道你的老师是否更喜欢你使用StringBuilder –

+0

我们不允许使用任何其他的字符串操作 – JavaJoker204

+0

@ScaryWombat我猜不是 - 如果你被允许使用它,为什么你不会只是使用'+'(或'.concat')。 –

回答

3

您正在执行分配而不是级联,并且无论如何您都不能将char分配给String变量。

为了串连的字符,你可以使用+运营商(或+=):

String concatenated = ""; 
for (int i = 0; i < firstString.length(); i++){ 
    concatenated += firstString.charAt(i); 
} 

或者你可以使用一个StringBuilder对象,并追加的字符吧:

StringBuilder concatenated = new StringBuilder(firstString.length()+secondString.length()); 
for (int i = 0; i < firstString.length(); i++){ 
    concatenated.append(firstString.charAt(i)); 
} 
for (int i = 0; i < secondString.length(); i++){ 
    concatenated.append(secondString.charAt(i)); 
} 
System.out.println(concatenated.toString()); 

这比+运算符更有效,因为它只生成一个StringBuilder对象,而+运算符生成新的每次使用它时都会有对象。

2

如果你想更有效地做到这一点比使用++=(其中有二次的时间复杂度,因为你建立在每个循环迭代一个新的字符串),你可以把东西放在一个数组:

char[] chars = new char[first.length() + second.length()]; 
for (int i = 0; i < first.length(); ++i) { 
    chars[i] = first.charAt(i); 
} 
for (int i = 0; i < second.length(); ++i) { 
    chars[i + first.length()] = second.charAt(i); 
} 
String concatenated = new String(chars); 

(或者您可以使用StringBuilder,这在内部基本相同)。