2012-10-27 52 views
-1

我有一个文本文件,每行包含3个数字。每个数字由一个空格分隔。将字符串转换为int和双精度型

1 1 4.0 

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

+3

会发生什么?真的吗? –

+0

其实对于一个新的Java用户来说,这个真的很有帮助。我不认为这是一个毫无意义的帖子,因为它是一个使用.split()函数来解决“使用1个字符串来解析多个整数”的问题。我强烈建议重新打开这篇文章。 – windsound

回答

2
  • 您需要首先在空间分割你的字符串,让每个值作为一个String数组 单个元素。你将不得不为此使用String#split

  • 现在,迭代你的数组,并检查每个元素是否包含dot(.)

  • 如果它包含一个dot,将其转换为double,使用Double#valueOfDouble#parseDouble

  • 如果它不包含dot,使用Integer#valueOfInteger#parseInt

  • 使用这种方法将其转换为integer,您不必担心存储您的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

+0

我喜欢这个解决方案,因为它不假定整数和双精度总是以相同的顺序。 – Austin

+0

@奥斯汀。是的。最好预先检查你的值,而不是稍后再玩例外。 :) –

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方法,该方法正则表达式作为参数,“分裂”字符串成结果的数组。然后,您可以使用它们的对象包装器通过访问相应的数组值从字符串对象适当地转换它们,从而使数字实际值为intdouble值。

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

在这里你去:当你键入 “字符串转换在Java诠释” 在谷歌

String numberSequence = "1 1 4.0"; 

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

    for(String no : numbers){ 
     if(no.contains(".")){ 
      Double.parseDouble(no); 
     } 
     else{ 
      Integer.parseInt(no); 
     } 
    }