2014-04-29 93 views
-4

我想分割一个字符串,并返回每个子字符串到Java中的数组(在c#中更容易),但编译器没有它。我不断收到索引越界的错误,当我试图调用数组中的任何字符串的值进行索引大于0.下面的代码我使用:返回Java - 字符串拆分错误

public class hello { 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 
     int setter = 3000; 
     String num = in.next(); 
     String[] numbers = num.split(" "); 
     int j = numbers.length; 
     for (int i =0; i < numbers.length ; i++) { 
      System.out.println(numbers[i]); 
     } 
     System.out.println(j); 

即使数组的长度是1.

+0

什么是你的输入? –

+0

我的第一个输入是5..then ...“1 2 3 4 5” – MProgramerX

+2

你的'in.next()'只返回一个单一的标记。您可能需要'in.nextLine()'。如果你懒得阅读Javadoc并调用错误的方法,那么所有东西都“在C#中更容易”。 –

回答

0

由于大卫华莱士在评论中说:你应该使用扫描仪nextLine ... 但...为什么要读取行分裂为整数?

public static void main(final String[] args) { 
    final Scanner in = new Scanner(System.in); 
    String line = null; 

    List<List<Integer>> all = new ArrayList<>(); 

    while ((line = in.nextLine()) != null) { 
     final String[] tokens = line.split(" "); 
     List<Integer> forOneLine = new ArrayList<>(); 
     for (final String token : tokens) { 
      try { 
       final Integer value = Integer.valueOf(token); 
       forOneLine.add(value); 
      } catch (final NumberFormatException e) { 
       // Not an Integer 
      } 
     } 
     all.add(forOneLine); 
    } 

现在可以吗?

+0

它应该如何工作的是用户首先输入他想要输入的数字......即5 ......然后他输入5个数字“1 2 3 4 5”,这些数字被分成一个数组。 – MProgramerX

+0

好的,我会评论 – farvilain

0

端起来解析为一个整数

public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     String n = in.nextLine(); 
     int ne = Integer.parseInt(n); 
     String m = in.nextLine(); 
     String[] numbers = m.split(" "); 
     System.out.println(n); 
     System.out.println(m); 
     for (String string : numbers) { 
      System.out.println(string); 
     } 
    }