当前位置: 首页 > news >正文

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

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

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()方法可以分成一个字符串数组,遍历数组便会得到一个一个的数值

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

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

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异常。

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

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

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

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

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

http://www.lryc.cn/news/190307.html

相关文章:

  • SQL: 索引原理与创建索引的规范
  • 基于STM32_DS18B20单总线传感器驱动
  • 目标识别项目实战:基于Yolov7-LPRNet的动态车牌目标识别算法模型(三)
  • springboot线程池创建与使用
  • UDP和TCP特点(部分)对比:
  • PostMan环境变量、全局变量、动态参数使用
  • 服务器数据恢复-服务器硬盘指示灯黄灯闪烁的数据恢复案例
  • ts 分发
  • SQL中的group by使用注意事项
  • 矩阵剪辑系统源码----pc/手机端双开发
  • 0基础学习VR全景平台篇 第106篇:认识调色软件Lightroom
  • React如何优化减少组件间的重新Render
  • mysql面试题44:MySQL数据库cpu飙升的话,要怎么处理?
  • 动画圆圈文字标志效果
  • 【数据结构】二叉树--顺序结构及实现 (堆)
  • 适用于嵌入式单片机的差分升级通用库
  • Exposure Normalization and Compensation for Multiple-Exposure Correction 论文阅读笔记
  • Arduino驱动BMI160 6轴惯性运动传感器(惯性测量传感器篇)
  • 数据挖掘实战(3):如何对比特币走势进行预测?
  • 巴以冲突中暴露的摄像头正对安全构成威胁
  • 【Redis】Redis性能优化:理解与使用Redis Pipeline
  • 前端全局工具函数utils.js/正则(持续更新)
  • 如何基于先进视频技术,构建互联网视频监控安全管理平台解决方案
  • 【React native】navigation 状态重置
  • 2023全国大学生软件测试大赛开发者测试练习题99分答案(ScapegoatTree2023)
  • Centos8 openjdk升级
  • 开启深度学习之门—《深度学习》
  • 优先调节阀位,条件调节阀位
  • oracle入门笔记六
  • 腾讯云优惠券种类、领取方法及使用教程分享