在Java中解析String中的double值

时间:2018-04-05 18:38:42

标签: java

我应该从以下字符串中提取double值:

r ( 4.5, 1.0 ) 10.5 7 ;  

但是我的代码会删除除数字之外的所有内容,而这不是我想要的。 我的代码:

import java.io.File;
import java.util.Scanner;


public class mine {

    public static void main(String[] args) throws Exception
    {

      String str;
      String numbers;

      Scanner SC=new Scanner(System.in);

      System.out.print("Enter string that contains numbers: ");
      str=SC.nextLine();

      //extracting string
      numbers=str.replaceAll("[^0-9]", "");

      System.out.println("Numbers are: " + numbers);
    }
}

输出我的代码:

Enter string that contains numbers: r ( 4.5, 1.0 ) 10.5 7 
Numbers are: 45101057

我想找到一种方法将数字分配给变量。例如,使用以下字符串:r ( 4.5, 1.0 ) 10.5 7(假设a,b,c,d已经声明) 我想要这个:

a = 4.5
b = 1.0
c = 10.5 
d = 7

3 个答案:

答案 0 :(得分:1)

如果您想保留浮点数和分隔符,除了十进制数字外,还必须在替换正则表达式中包含点字符和空格:

numbers = str.replaceAll("[^0-9. ]", "");

Demo.

一旦你有了字符串,就可以使用本Q& A:Convert a string of numbers into an array中讨论的技术来分离各个数字。

答案 1 :(得分:0)

如果你保证你的文件中有四个值,那么以这种方式拥有变量只会很有用。出于灵活性的考虑,最好将其放在列表中。

List<Double> numbers = new ArrayList<>();
// assuming str already has the numbers...
for(String s : str.split(" ") {
    numbers.add(Double.parseDouble(s));
}

将这些声明为单个变量使用上述相同方法的99%,只需交换单个值的列表。我把它作为读者的练习。

答案 2 :(得分:0)

试试这个(它使用第二个扫描程序尝试将每个标记解析为Double;如果它不是double,则解析将失败):

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    System.out.print("Enter string that contains numbers: ");
    String str = sc.nextLine();

    Scanner token = new Scanner(str);
    while token.hasNext() {
         String tokenStr = token.next();
         try {
             double d = Double.parseDouble(tokenStr);
             // YOUR CODE: do something with d here, such as appending
             // it to an array, assigning it to a var, or printing it out.

         } catch (NumberFormatException e) {
             // no op
         }
    }
}