拆分子串中的字符串并将其放入String []中

时间:2014-01-08 15:03:24

标签: java string arrays

所以我有一个字符串,我在子字符串中分裂。这些子串中的每个子串都应该成为新String数组的元素。

到目前为止,我有这个:

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    InputStreamReader isr = new InputStreamReader (System.in);
    BufferedReader in = new BufferedReader (isr);

    System.out.println("String: ");
    String s = in.readLine();


    String [] rij = new String [s.length()];

    for (int i = 0; i < s.length(); i++) {      
        if (s.charAt(i) == ' ' || i==0){
            String temp = s.substring(i,s.indexOf(' ',i+1));
            rij [i] = temp;

        }

    }

如果我输入的是:“Hello World”。 我的String数组应该成为{Hello,World。}

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -33
    at java.lang.String.substring(String.java:1911)
    at CyclischPermuteren.main(CyclischPermuteren.java:34) 

我不知道如何解决这个问题,因为我无法弄清楚我应该使用什么作为我的String数组的长度,因为需要进行的子串数量是未知的,需要在静态中使用该字符串数组方法稍后。

4 个答案:

答案 0 :(得分:2)

因为当i等于s.length()-1(您的循环条件中的最后一个元素)时,您正试图获得substring s的{​​{1}}这基本上(此时)i+1超出范围。

这是因为如果一个数组大小为10,那么它的最后一个元素是9(因为它从0开始)。因此,如果您尝试访问s.length(),那么您尝试访问(在我的示例中)数组中的第10项,结尾为9。

答案 1 :(得分:0)

你不能使用String方法split()

String[] parts = s.split("");

System.out.println(parts[0]);
System.out.println(parts[1]);

答案 2 :(得分:0)

容易做到!

public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub

  InputStreamReader isr = new InputStreamReader (System.in);
  BufferedReader in = new BufferedReader (isr);

  System.out.println("String: ");
  String s = in.readLine(); 

  String [] rij = s.split(" "); // asumming split should be done on spaces.
}

查看String的split方法

答案 3 :(得分:0)

我认为您尝试做的是:

String[] rij = new String[s.length()];

int j = 0; // To keep index in the array

for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) != ' ') { // When is not space, add character to 'temp'     
        temp += s.charAt(i);
    }
    else { // If it is space, add temp to array and reset 'temp'
        rij[j++] = temp;
        temp = "";
    }
}

rij[j] = temp; // Add last word

for (String s1: rij)
    if (s1 != null)
       System.out.println(s1);

<强>输出:

String: 
Welcome to StackOverflow, user3173758
Welcome
to
StackOverflow,
user3173758

注意:

由于您正在创建一个具有最大长度的数组rij,因此您获得了一些null。如果您想避免这种情况,可以尝试使用ArrayList及其add()方法。请在this link中了解详情。