-1

我有一个文本文件,其中有几行,每行包含 3 个数字。每个数字由一个空格分隔。

    1 1 4.0

当我从文件中读取这个字符串时,我想将前两个数字转换为整数,最后一个转换为双精度数。我该怎么做呢?

4

4 回答 4

5
String [] numbers = "1 1 4.0".split(" ");
int first = Integer.parseInt(numbers[0]);
int second = Integer.parseInt(numbers[1]);
double third = Double.parseDouble(numbers[2]);

这是假设数字将始终采用这种形式。

解释

该类String有一个split将正则表达式作为参数并将字符串“拆分”为结果数组的方法。然后,您可以通过使用它们的对象包装器通过访问相应的数组值从字符串对象适当地转换它们 来使数字int和值成为实际值。double

于 2012-10-27T08:04:53.593 回答
2
  • 您需要首先在空间上拆分字符串,以将每个值作为字符串数组中的单个元素。您将不得不为此使用String#split

  • 现在,遍历您的数组,并为每个元素检查它是否包含一个dot(.).

  • 如果它包含 a dot,则将其转换为double, 使用Double#valueOforDouble#parseDouble

  • 如果它不包含 a dot,则将其转换为integerusingInteger#valueOfInteger#parseInt

  • 使用这种方法,您不必担心您的intdouble值的存储顺序。

一个例子: -

    String str = "21.3";
    if (str.contains(".")) {
        System.out.println(Double.parseDouble(str));
    } else {
        System.out.println(Integer.parseInt(str));
    }

这两种方法的区别在于:-

Integer.parseInt返回一个primitive int,而Integer.valueOf返回一个Integer wrapper object

于 2012-10-27T08:01:24.697 回答
0

您可以尝试以下方法:

try {
        int posStart    = 0;
        int posEnd      = text.indexOf(" ", posStart);
        int firstNumber = Integer.valueOf(text.substring(posStart, posEnd));

        posStart    = posEnd + 1;
        posEnd      = text.indexOf(" ", posStart);
        int secondNumber = Integer.valueOf(text.substring(posStart, posEnd));

        posStart    = posEnd + 1;
        double thirdNumber = Double.valueOf(text.substring(posStart));

        System.out.println(firstNumber + " / " + secondNumber + " / " + thirdNumber);
    }
    catch (Exception err) {
        System.out.println(err.getMessage());
    }
于 2012-10-27T08:09:01.770 回答
0

干得好:

    String numberSequence = "1 1 4.0";

    String[] numbers = numberSequence.split(" ");

    for(String no : numbers){
        if(no.contains(".")){
            Double.parseDouble(no);
        }
        else{
            Integer.parseInt(no);
        }
    }
于 2012-10-27T09:03:23.620 回答