我正在从蓝牙特征中获取字节数据,并将其转换为如下所示的浮点数组:
[318.0159,331.81818,324.71603,348.4345,323.108,3.2360008]
我希望能够将这些数据分成6个字符串,
“ 318.0159”“ 331.81818”“ 324.71603”“ 348.4345”“ 323.108”“ 3.2360008”。
我已经尝试这样做:
EDIT(像这样初始化charData):
final StringBuilder stringBuilder = new StringBuilder(bytes.length);
for (byte byteChar : bytes)
stringBuilder.append(String.format("%02X ", byteChar));
String charData = stringBuilder.toString();
String[] data = charData.split(",");
System.out.println(data[1]);
System.out.println(data[2]);
System.out.println(data[3]);
System.out.println(data[4]);
System.out.println(data[5]);
System.out.println(data[6]);
但是当它尝试打印第一个数据点时,出现异常:
Unhandled exception in callback
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
提前感谢您的帮助!
答案 0 :(得分:2)
您需要先删除[
和]
,然后数组索引范围为[0,5]:
String charData = "[318.0159, 331.81818, 324.71603, 348.4345, 323.108, 3.2360008]";
charData = charData.replace("[", "").replace("]", "");
String[] data = charData.split(",");
System.out.println(data[0]);
System.out.println(data[1]);
System.out.println(data[2]);
System.out.println(data[3]);
System.out.println(data[4]);
System.out.println(data[5]);
输出:
318.0159
331.81818
324.71603
348.4345
323.108
3.2360008
要避免前导空格,可以使用正则表达式进行分割:
String[] data = charData.split(",\\s*");
输出:
318.0159
331.81818
324.71603
348.4345
323.108
3.2360008
答案 1 :(得分:2)
Sun的答案就在眼前,我也希望修剪输入内容:
charData= charData.replace("[", "").replace("]", "");
String[] data = charData.split(",");
for(int x=0;x<=data.length;x++){
String data_cleaned = data[x].trim();
System.out.println(data_cleaned);
}
答案 2 :(得分:1)
尝试
String[] data = ["318.0159", "331.81818", "324.71603", "348.4345", "323.108", "3.2360008"]
for (int i = 0; i < data.size(); i++) {
System.out.println(data[i]);
}
当您访问某种数组但索引不可用时,发生ArrayIndexOutOfBoundsException。还记得数组从0开始
答案 3 :(得分:0)
您的charData似乎没有任何数据,
它与您在查询中提出的要求不同。
请在split()之前打印数据
还请检查for之前以字节为单位的数据(byteChar:字节)
这也不是其他建议的数组索引o到5的问题,其他明智的错误将是java.lang.ArrayIndexOutOfBoundsException:index = 6