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)
答案 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);
如果您想将对解析为整数,则需要依次将其应用于每个元素:
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()]))
答案 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.