将一个字符串拆分为3个部分并转换为int

时间:2012-10-02 02:20:16

标签: java string int

import java.util.Scanner;
public class Question3 {
public static void main(String[] args) {
    String input;
    int i1,i2,i3;
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Input a 3 digit number ");
    input = keyboard.next();
    String[] numbers = input.split("\\s+");
    i1= Integer.parseInt(numbers[0]);
    i2= Integer.parseInt(numbers[1]);
    i3= Integer.parseInt(numbers[2]);
    System.out.println(i1);
    System.out.println(i2);
    System.out.println(i3);

    }   
}

这是它应该做的:有人类型 1 2 3 并且程序应该输出

1

2

3 但是,它会在行i2 = ....

处抛出一个arrayindexoutofbounds execpetion

我需要他们成为INTs顺便说一句,因为我之后需要做些什么......我怎么能解决这个问题? (我班上的问题是......)

  

编写一个程序,使用扫描仪读取三个整数(正数)显示最多三个。 (请不要使用任何一个运算符&&或||来完成。这些运算符很快就会在课堂上介绍。不需要类似的循环。)

     

一些示例运行:

     

请输入3个整数:5 8 3

     

最多三个是:8

4 个答案:

答案 0 :(得分:2)

而不是input = keyboard.next();尝试input = keyboard.nextLine();

根据Scanner文档,默认分隔符为空格 -

  

扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。

方法next() -

  

查找并返回此扫描仪的下一个完整令牌。完整的标记之前和之后是与分隔符模式匹配的输入。

所以在我们的例子中keyboard.next()只返回第一个数字作为字符串。

答案 1 :(得分:2)

import java.util.Scanner;
public class Test {
public static void main(String[] args) {
    int i1,i2,i3;
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Input a 3 digit number ");

    i1= Integer.parseInt(keyboard.next());
    i2= Integer.parseInt(keyboard.next());
    i3= Integer.parseInt(keyboard.next());
    System.out.println(i1);
    System.out.println(i2);
    System.out.println(i3);

    }   
}

答案 2 :(得分:0)

import java.util.Scanner;

class Question3 {
    public static void main(String[] args) {

        String input;
        int i1,i2,i3;
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Input a 3 digit number ");
        input = keyboard.next();
        int i=0;
        for (String result: input.split("\\s+")){
             System.out.println(result.charAt(i++));
             System.out.println(result.charAt(i++));
             System.out.println(result.charAt(i++));
        }

    }   
}

您的原始代码包含以下错误:numbers[0]包含没有空格的String的所有元素,因此在尝试访问numbers[1]时会引发错误。在此代码中,for循环仅执行一次,没有空格的String存储在String引用结果中,因此使用result.charAt()显示数字会得到正确的结果。

答案 3 :(得分:-1)

使用keyboard.nextInt()读取int值。如果您需要阅读3个值,请使用3次。

文档链接:

  

将输入的下一个标记扫描为int。如果下一个标记无法转换为有效的int值,则此方法将抛出InputMismatchException,如下所述。如果翻译成功,扫描仪将超过匹配的输入。

如果您不知道下一个数据是否可以是整数,则可以使用Scanner#hasNextInt方法。