Java读取并转换字符串中的浮点数

2023-10-17 15:53:37 浏览数 (1)

在写Android接收蓝牙数据的时候,由于传过来的蓝牙数据转换后都为字符串格式,但是需要从其中提取出来浮点数,所以通过查阅资料写出了从字符串中提取并转换为浮点数的方法,特记录下来以供参考。

原始数据内容

均为String字符串类型,数据是浮点数类型并有可能出现负数

Acceleration X: 9.84, Y: -2.54, Z: -1.84 m/s Rotation X: -0.08, Y: -0.07, Z: 0.01 rad/s^2

提取字符串中的相关数值部分

使用Java中的Character类中的isDigit()方法来判断当前字符是否为数字,并在字符串中进行遍历。还要利用StringBuilder对象来构建目标字符串。

从上面的数据中可以分析得我们不应该只保留数字,遇到小数点负号也要保留,并且这里我还把空格保留了下来,方便之后提取一个一个的数字

代码语言:javascript复制
String str = "xxxxxxx";//待提取的字符串

StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
    if (Character.isDigit(c)||c=='.'||c==' '||c=='-') {
        sb.append(c);
    }
}

String result = sb.toString();

通过这一步的操作提取出来的结果仍然是字符串String类型,但内容变成了

9.84    -2.54    -1.84 -0.08    -0.07    0.01

分割出单个数值并转换为float/double类型

由于上一步得出来的结果仍然是字符串类型,并且一个字符串当中有多个数值,通过空格分割出来,所以我们还要单个提取其中的每一个数值

通过空格分割出单个的字符串

首先利用字符串中的每个数值之间是通过空格分隔的,所以可以分割出来一个一个的数值字符串。通过split()方法可以分成一个字符串数组,遍历数组便会得到一个一个的数值

代码语言:javascript复制
String [] arr = str.split(" "); //str为待分割的字符串
for(String ss : arr){
    System.out.println(ss);
}

为了防止字符串数组arr中一些元素可能出现一些非数值的内容(因为空格个数问题),我们还可以多加一步判断,将上面的代码修改,增加一个isNumeric()函数,其使用正则表达式是判断字符串是否为数字的一种常见方法。Java中的正则表达式可以通过matches()方法来进行匹配。

代码语言:javascript复制
public static boolean isNumeric(String str) {
    return str.matches("-?\d (\.\d )?");
}

String [] arr = str.split(" "); //str为待分割的字符串
for(String ss : arr){
    if(isNumeric(ss))
        System.out.println(ss);
}

单个字符串String转换为浮点数float/double

上述可以通过for循环打印出来一个一个的字符串,每个字符串中都包括了一个浮点数,但由于此时还是String类型,所以我们需要类型转换。

Float.parseFloat()方法可以将字符串转化为float类型的浮点数。该方法接收一个字符串作为参数,返回对应的float类型的浮点数值。如果字符串无法转化为合法的浮点数,则会抛出NumberFormatException异常。

代码语言:javascript复制
String str = "3.14";
float floatValue = Float.parseFloat(str);
System.out.println(floatValue); // 输出结果为 3.14

Double.parseDouble()方法与Float.parseFloat()方法类似,可以将字符串转化为double类型的浮点数。 

代码语言:javascript复制
String str = "3.14";
double doubleValue = Double.parseDouble(str);
System.out.println(doubleValue); // 输出结果为 3.14

借由上面的代码我们就可以把整体的代码给得出来,并且通过for循环把每个转换后的浮点数给成功打印出来

代码语言:javascript复制
String str = "xxxxxxx";//待提取的字符串

StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
    if (Character.isDigit(c)||c=='.'||c==' '||c=='-') {
        sb.append(c);
    }
}

String resultStr = sb.toString();

public static boolean isNumeric(String str) {
    return str.matches("-?\d (\.\d )?");
}

float floatValue;
String [] arr = resultStr.split(" "); //str为待分割的字符串
for(String ss : arr){
    if(isNumeric(ss))
        floatValue = Float.parseFloat(ss);
        System.out.println("转换后的浮点数值为:" floatValue);
}

0 人点赞