仅转换具有浮点值的字符串

时间:2013-11-26 04:38:41

标签: java

我有一个名为MyText.txt的外部文本文件。我正在java中读取该文件并尝试仅提取浮点值。文本文件中的值和句子可能会有所不同。这就是我到目前为止所做的:

MyFile.txt内容:

Harry have 21.00pounds. 11/25/2009 is my birthday.

我的代码是

for(int K = 1; K < myTextWords.length; K++){
    String s = myTextWords[K];
    try{
        float f = Float.valueOf(s.trim()).floatValue();
        System.out.println("float f = " + f);
    }
    catch (NumberFormatException nfe){
        System.err.println("NumberFormatException: " + nfe.getMessage());
    }
} 

问题是:

  1. 21.00打印为

    float f = 21.0
    
  2. 11/25/2009也转换为字符串并打印为

    float f = 11.0
    float f = 25.0
    float f = 2009.0 
    
  3. 如何限制程序只提取和转换类似21.00,190.20的字符串。

    **文本值的内容可能会有所不同,而不是固定的。

2 个答案:

答案 0 :(得分:1)

检查所有正则表达式

String decimalPattern = "([0-9]*)\\.([0-9]*)";  
String number="20.00";  
boolean match = Pattern.matches(decimalPattern, number);
if(match){
try{
        float f = Float.valueOf(number.trim()).floatValue();
        System.out.println("float f = " + f);
    }
    catch (NumberFormatException nfe){
        System.err.println("NumberFormatException: " + nfe.getMessage());
    }
}

答案 1 :(得分:0)

使用Scanner类方法的方法(需要空格);

String str = "Harry have 21.00 pounds. 11/25/2009 is my birthday.";
Scanner scnr = new Scanner(str);
  while(scnr.hasNext()) {
     if(scnr.hasNextFloat()) {
       System.out.println(scnr.nextFloat());  // show it
     }else{
       scnr.next(); // skip
     }
  }