如何读入和拆分由空格和正斜杠分隔的数字串

时间:2016-10-24 10:04:40

标签: java string split

样品输入:1/2 3/4 5/6 7/8 9/10

我期望它做什么:首先根据空格分割字符串,所以最终得到的字符串数组为{1 / 2,3 / 4,5 / 6,6 / 8,9 / 10},并且然后将其拆分为整数数组intA {1,2},intB {3,4},intC {5,6},intD {7,8},intE {9,10},这样我最终可以将它们传递给具有分子和分母的分数对象。

以下是我目前的情况:

public static void main(String[]args)
{
    Scanner keyboard = new Scanner(System.in);
    String str;
    str = keyboard.nextLine();
    String[] splitStr = str.split(" ");

    Fraction[] input = new Fraction[10];

    for(int i = 0; i < splitStr.length; i++)
    {
        String[] fract = splitStr[i].split("/");
        int num = Integer.valueOf(fract[0]);
        int den = Integer.valueOf(fract[1]);
        double fraction = (double)num / den;
    }

    for(int i = 0; i < input.length; i++)
    {
        System.out.println(input[i]);
    }
}

当我输入上面的字符串时,我得到空值。如果我输入没有正斜杠的任何值,如下所示:1/2 3/4 5/6 7 8 9/10而不是将7和8读为7/1和8/1,程序将遇到NullPointerException错误。必须有一种更简单的方法来做到这一点,不是吗?

4 个答案:

答案 0 :(得分:4)

  

我得到空值

这是因为您没有向input添加任何值,您只会初始化它,这将填充null值。

我不确定如何创建Fraction个对象,但您需要创建这种对象并将它们添加到数组中。这是一个例子:

Fraction[] input = new Fraction[10];

for(int i = 0; i < splitStr.length; i++) {
    String[] fract = splitStr[i].split("/");
    int num = Integer.valueOf(fract[0]);
    int den = Integer.valueOf(fract[1]);
    input[i] = new Fraction(num, den);
}

如果您想在输入包含单个数字时将denominator设置为1,则可以执行以下操作:

for(int i = 0; i < splitStr.length; i++) {
    String[] fract = splitStr[i].split("/");
    int num = Integer.valueOf(fract[0]);
    int den = 1;
    if(fract.length == 2){
        den = Integer.valueOf(fract[1]);
    }
    input[i] = new Fraction(num, den);
}

此外,将input数组的长度设置为等于splitStr数组的长度更安全。

Fraction[] input = new Fraction[splitStr.length];

答案 1 :(得分:0)

对于没有书房的数字(7 8),您需要检查分形的长度:

String[] fract = splitStr[i].split("/");
int num = Integer.valueOf(fract[0]);
int den = 1
if(fract.length > 2)
        den = Integer.valueOf(fract[1]);

答案 2 :(得分:0)

for(int i = 0; i < splitStr.length; i++)
{  
    // if statement works for 7 or 8
    if(splitStr[i].length() == 1){
       // do something

    } else if(splitStr[i].length() == 3){
       String[] fract = splitStr[i].split("/");
       int num = Integer.valueOf(fract[0]);
       int den = Integer.valueOf(fract[1]);
       double fraction = (double)num / den;
    }
 }

答案 3 :(得分:0)

您可以使用像this.props.params.params这样的正则表达式来检查字符串是否由分数组成,并相应地管理情况。