Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-字符串拆分错误_Java_String_Split - Fatal编程技术网

Java-字符串拆分错误

Java-字符串拆分错误,java,string,split,Java,String,Split,我试图拆分一个字符串并将每个子字符串返回到Java中的一个数组(在c#中更容易),但编译器没有。当我试图调用索引大于0的数组中任何字符串的值时,我总是得到一个索引越界错误。以下是我使用的代码: public class hello { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt();

我试图拆分一个字符串并将每个子字符串返回到Java中的一个数组(在c#中更容易),但编译器没有。当我试图调用索引大于0的数组中任何字符串的值时,我总是得到一个索引越界错误。以下是我使用的代码:

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);
公共类你好{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(系统输入);
int n=in.nextInt();
int setter=3000;
字符串num=in.next();
字符串[]数字=num.split(“”);
int j=数字。长度;
for(int i=0;i

甚至返回的数组长度也是1。

正如David Wallace在评论中所说:您应该使用扫描仪的nextLine。。。 但是…为什么要将行拆分为int

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); 
    }
publicstaticvoidmain(最终字符串[]args){
最终扫描仪输入=新扫描仪(系统输入);
字符串行=null;
List all=new ArrayList();
而((line=in.nextLine())!=null){
最终字符串[]标记=line.split(“”);
List forOneLine=new ArrayList();
for(最终字符串标记:标记){
试一试{
最终整数值=Integer.valueOf(令牌);
forOneLine.add(value);
}捕获(最终编号格式e){
//不是整数
}
}
全部。添加(forOneLine);
}

现在可以了吗?

最终解析为一个整数

 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);
        }
    }

我的第一个输入是5..然后..“1 2 3 4 5”您的
in.next()
只返回一个令牌。您可能希望
in.nextLine()
代替。一切都“在C中更简单”如果您不费心阅读Javadoc并调用错误的方法。Wallace先生,这修复了错误,但现在它只接受一行输入,而不是两行输入,您可能需要插入对
nextLine()的额外调用
读取第一次输入后出现的换行符。好的,添加一个额外的呼叫解决了这个问题,它似乎正常工作,谢谢Wallace先生。它的工作原理是用户首先输入他想输入的数字数量…即5…然后输入5个数字“1 2 3 4 5”这些数字被分成一个数组。