如何将数组的参数连接成一个字符串?

时间:2014-07-08 04:18:26

标签: java

这个程序应该使用StringBuilder来连接放入字符串数组中的每个单词,形成一个整数字符串,用空格分隔。对于我的输出,我什么也得不到,因为我尝试捕获异常,但它似乎是一个ArrayIndexOutofBounds异常。我的代码在哪里有缺陷?

    package practice;

    import java.util.Scanner;
    import java.io.*;

    public class Stitching {


    public String stitch(String... words) {

    String wordsAsArray[] = words;
    StringBuilder sb = new StringBuilder();

    for(int i=0;i<=wordsAsArray.length;i++){

    sb.append(words[i]);
        }

    return sb.toString();


    }

    public static void main(String args[]) {
    try{

    BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Please enter a line of words: ");

    String line = br.readLine();

    String wordsAsArray[] = line.trim().split("\\s+");

    Stitching stitching = new Stitching();
    System.out.println("Output: ");
    System.out.println(stitching.stitch(wordsAsArray)); 

} catch(Exception e){}      
    }
}

3 个答案:

答案 0 :(得分:1)

问题是for循环:

for(int i=0;i<=wordsAsArray.length;i++)

由于ArrayIndexOutOfBounds比较,这会抛出<=例外。而是使用

for(int i=0;i<wordsAsArray.length;i++)

在运行此代码时,您没有发现问题,因为您正在使用try-catch阻止捕获异常。

捕获异常时,应该执行某种日志记录;对于快速测试,一个很好的例子是:

try {
    // Code here...
}catch (Exception e) {
    e.printStackTrace();
}

这将打印导致它进入控制台的异常类型和代码跟踪。

答案 1 :(得分:0)

stitch的代码非常接近正确。

public String stitch(String... words) {
  // String wordsAsArray[] = words;      // <-- redundant
  StringBuilder sb = new StringBuilder();
  for (int i=0; i < words.length; i++){  // <-- Less then, not less then equal
    if (i != 0) {
      sb.append(' ');                    // <-- let's add a space between the words.
    }
    sb.append(words[i]);
  }
  return sb.toString();
}

另外,如果你没有默默地忽略你的异常,你自己会看到for循环的问题。

} catch(Exception e) {
  e.printStackTrace(); // <-- print the Exception
}

答案 2 :(得分:0)

正如Caleb所说,for(int i=0;i<=wordsAsArray.length;i++)会抛出ArrayIndexOutOfBoundsException

现在,如果你想知道为什么ArrayIndexOutOfBoundsException好 - 在运行时检查所有数组访问;尝试使用小于零或大于或等于数组长度的索引会导致ArrayIndexOutOfBoundsException被抛出 这可能应该修复你的代码

    for(int i=0;i<wordsAsArray.length;i++){

            sb.append(words[i]+" ");
        }