【问题标题】:splitting a single binary string value into array将单个二进制字符串值拆分为数组
【发布时间】:2014-02-17 21:03:22
【问题描述】:

这不可能吗?我之前使用 split() 方法来拆分字符串并将它们存储到数组中。但是对于二进制字符串值,我似乎无法做到这一点..

例如:我希望将“100000”拆分并存储在一个数组中,如下所示:someArray = {1,0,0,0,0,0} 但我似乎无法做到这一点。它不断导致这样的结果: someArray = {100000,0,0,0,0, ...}

这就是我所拥有的:

    result = Integer.toBinaryString(sum);

    String[] temp = result.split(" ");

    for(int num: resultArray) {
        for(String s: temp) {
            resultArray[num] = Integer.parseInt(temp[s]);
        }
    }

    for(int num: resultArray) {
        System.out.print(num + ",");
    }

【问题讨论】:

  • 你在一个空格上分割,但是你的二进制字符串中没有空格?您应该拆分 "" - 即“无”。我想。
  • 你为什么不使用% 10
  • @Prince:如果您要将字符串视为十进制数(您必须这样做才能使% 10 有用),您最多只能处理位串10 位。除此之外的任何事情都会导致溢出/环绕,除非您达到long - 即使那样您仍然无法处理完整的 int 位。
  • 你有两个嵌套的for 循环......所以对于num 的每个值,你循环temp 的每个元素。并且没有任何错误检查...

标签: java arrays string split binary


【解决方案1】:

尽量贴近代码的精神(不一定是最有效的做事方式):

您需要拆分“无” - 即

String[] temp = result.split("");

根据更新的问题更新代码:

    String result;
Integer sum = 123;
int[] resultArray = new int[32];
Integer ii;
result = Integer.toBinaryString(sum);

    String[] temp = result.split("");
    ii = 0;
    for(String s: temp) {
      try {
        resultArray[ii++] = Integer.parseInt(s);
      } catch (NumberFormatException e) {
         // do nothing
      }
    }

    int n = ii;
    for (ii = 0; ii < n; ii++) {
      System.out.print(resultArray[ii]);
    }
    System.out.println();

输出:

01111011

我将数组的大小限制为 32 - 典型的 int...如果您预计 sum 可能是更长的类型,您需要相应地进行调整。

顺便说一句,使用起来会更快

string[] temp = result.toCharArray();
ii = 0;
for(char s: temp) {
        resultArray[ii++] = s - '0';
}
int n = ii;
for (ii = 0; ii < n; ii++) {
      System.out.print(resultArray[ii]);
}

因为你知道result 是纯粹的数字。

【讨论】:

  • 我之前做过,但它给了我一个错误..我会再试一次
  • 我想我知道为什么会出现错误。我更新了第一个帖子。基本上,如果我想创建 String 数组的 int 数组副本,我将如何正确地将字符串值转换为 int?
  • @B.V 我已经更新了我的答案……现在应该对你有用。我更喜欢最后一种配方——最紧凑的。但早期版本显示了如何修改代码以使其工作;它更接近你的原作。
【解决方案2】:

首先将String 转换为char 数组,然后将其转换为int

String str = "100000";
char ch []  = str.toCharArray();
int [] temp = new int [ch.length];
for (int i = 0; i < ch.length; i++) {
     temp[i] = Integer.parseInt(""+ch[i]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2019-06-11
    • 2012-01-25
    • 2016-10-14
    相关资源
    最近更新 更多