【问题标题】:How to split an array of strings into multiple strings?如何将字符串数组拆分为多个字符串?
【发布时间】:2018-08-02 15:25:17
【问题描述】:

我从蓝牙特性中获取数据(以字节为单位)并将其转换为如下所示的浮点数组:

[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”。

我已经尝试过这样做:

编辑(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

提前感谢您的帮助!

【问题讨论】:

  • 如何初始化 charData?
  • 数组索引从零开始。从0开始
  • 您在拆分之前尝试打印charData 吗?这样做,看看它是否像您在问题中发布的数组。
  • 你构建了一个没有逗号的字符串,然后在上面调用split(",")。此外,您的代码中没有浮点值。

标签: java arrays regex string split


【解决方案1】:

需要先删除[],数组索引范围为[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

【讨论】:

  • 数据[6] 似乎没有问题,因为错误不是 java.lang.ArrayIndexOutOfBoundsException: index=6
【解决方案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);
 }

【讨论】:

  • 您的回答对我也很有效,感谢您的帮助!
  • 很高兴我能帮上忙 :)
【解决方案3】:

试试这个

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 开始

【讨论】:

    【解决方案4】:

    您的 charData 似乎没有任何数据,
    这与您在 querstion 中询问的不同。
    请在 split() 之前打印数据
    还要检查你的 for (byte byteChar : bytes) 之前的字节数据

    也不是其他人建议的数组索引 o 到 5 的问题,其他明智的错误应该是 java.lang.ArrayIndexOutOfBoundsException: index=6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2012-02-22
      • 2016-04-01
      相关资源
      最近更新 更多