通过每两个字符分隔将二进制字符串更改为整数

时间:2018-10-25 12:12:54

标签: java regex

String startingp="1000000100001110010100";

 String start =java.util.Arrays.toString(startingp.split("(?<=\\G..)"));
 start = start.replaceAll("\\p{P}","").trim(); //trim coz of the bracket
 int foo=Integer.parseInt(start, 2);
 System.out.println("Splitstart:" + start);

我需要将startingp每两位分开,即   binarystring:example 11 00 01并将它们更改为整数值。但是我收到错误消息。请为我解释代码有什么问题

  

线程“ main”中的异常java.lang.NumberFormatException:对于输入字符串:“ 10 00 00 01 00 00 11 10 01 01 00”       在java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)       在java.lang.Integer.parseInt(Integer.java:580)

5 个答案:

答案 0 :(得分:0)

消息非常清楚:"10 00 00 01 00 00 11 10 01 01 00"不是parseInt可以解析为int的字符串。

目前尚不清楚为什么要首先将数字分成几对。只需直接解析startingp

String startingp="1000000100001110010100";
int foo=Integer.parseInt(startingp, 2);

Ideone demo

如果您想将解析为整数,则需要依次将其应用于每个元素:

System.out.println(
    Arrays.stream(startingp.split("(?<=\\G..)"))
        .map(p -> Integer.valueOf(p, 2))
        .map(Object::toString));
    .collect(joining(" "))

答案 1 :(得分:0)

我认为您需要这样的东西:

String startingp = "1000000100001110010100";
List<Integer> result = Arrays.stream(startingp.split("(?<=\\G..)"))
                .map(s -> Integer.parseInt(s, 2)) // parse each string in the array
                .collect(Collectors.toList());    // collect the result in the end

输出

[2, 0, 0, 1, 0, 0, 3, 2, 1, 1, 0]

每个int等效于以下其中一个:

[10, 00, 00, 01, 00, 00, 11, 10, 01, 01, 00]
  2   0   0   1   0   0   3   2   1   1   0

答案 2 :(得分:0)

为了将每2个字符解析为其十进制表示形式,您需要再次将字符串拆分为空格并每2个字符解析一次。因此,您需要一个for循环:

ArrayList<String> convertedToDecimal = new ArrayList<>();
for(String twoChars: start.split(" ")){
    convertedToDecimal.add(String.valueOf(Integer.parseInt(start, 2)));
}

然后可以使用String.join("", convertedToDecimal.toArray(new String[convertedDecimal.size()]))

将这个ArrayList连接起来以创建所需的字符串。

答案 3 :(得分:0)

使用普通的旧Java:

    List<Integer> intNums = new ArrayList<>();
    String startingp="1000000100001110010100";
    for(int i=0; i<startingp.length() - 2; i+=2){
        String strNum = startingp.substring(i,i+2);
        Integer intNum = Integer.parseInt(strNum);
        intNums.add(intNum);
    }
    System.out.println(intNums);

答案 4 :(得分:0)

您在此行遇到的问题;

int foo=Integer.parseInt(start, 2);

因为此处start参数等于10 00 00 01 00 00 11 10 01 01 00。如果您分析parseInt函数,则可以看到此字符串上的 comparasion 2 string的所有字符。因此,在您的参数space中,这不是 有效

要解决此问题,请用空格分割以得到字符串中的所有两个组合。这样做吧;

String startingp = "1000000100001110010100";
String start = java.util.Arrays.toString(startingp.split("(?<=\\G..)"));
start = start.replaceAll("\\p{P}", "").trim(); //trim coz of the bracket
final String[] splittedStart = start.split("\\s+"); // parse with blank 
Arrays.stream(splittedStart).forEach(s -> System.out.println("Split start: " + Integer.parseInt(s, 2))); // to print.