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


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

    目录

    原始数据内容

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

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

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

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


    原始数据内容

    均为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对象来构建目标字符串。

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

    1. String str = "xxxxxxx";//待提取的字符串
    2. StringBuilder sb = new StringBuilder();
    3. for (char c : str.toCharArray()) {
    4. if (Character.isDigit(c)||c=='.'||c==' '||c=='-') {
    5. sb.append(c);
    6. }
    7. }
    8. String result = sb.toString();

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

    9.84    -2.54    -1.84

    -0.08    -0.07    0.01

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

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

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

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

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

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

    1. public static boolean isNumeric(String str) {
    2. return str.matches("-?\\d+(\\.\\d+)?");
    3. }
    4. String [] arr = str.split(" "); //str为待分割的字符串
    5. for(String ss : arr){
    6. if(isNumeric(ss))
    7. System.out.println(ss);
    8. }

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

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

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

    1. String str = "3.14";
    2. float floatValue = Float.parseFloat(str);
    3. System.out.println(floatValue); // 输出结果为 3.14

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

    1. String str = "3.14";
    2. double doubleValue = Double.parseDouble(str);
    3. System.out.println(doubleValue); // 输出结果为 3.14

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

    1. String str = "xxxxxxx";//待提取的字符串
    2. StringBuilder sb = new StringBuilder();
    3. for (char c : str.toCharArray()) {
    4. if (Character.isDigit(c)||c=='.'||c==' '||c=='-') {
    5. sb.append(c);
    6. }
    7. }
    8. String resultStr = sb.toString();
    9. public static boolean isNumeric(String str) {
    10. return str.matches("-?\\d+(\\.\\d+)?");
    11. }
    12. float floatValue;
    13. String [] arr = resultStr.split(" "); //str为待分割的字符串
    14. for(String ss : arr){
    15. if(isNumeric(ss))
    16. floatValue = Float.parseFloat(ss);
    17. System.out.println("转换后的浮点数值为:"+floatValue);
    18. }

  • 相关阅读:
    centos7安装mysql8
    yarn install 报错
    windows删除大量文件的优秀方式
    【无人机】四轴无人机的轨迹进行可视化和动画处理(Matlab代码实现)
    【考研词汇训练营】Day 14 —— panini,predict,access,apologize,sense,transport,aggregation
    软考高级信息系统项目管理师如何准备论文?
    如何通过cURL库实现远程控制插座
    Springboot毕设项目基于Java的12306售票系统的设计与实现uq5mf(java+VUE+Mybatis+Maven+Mysql)
    力扣:22-括号生成
    批量归一化(部分理解)
  • 原文地址:https://blog.csdn.net/danielxinhj/article/details/133789463