我正在尝试将String分成数组。整个程序应该将二进制文件转换为字符串,但是我遇到的问题是将字符串划分为数组。我觉得很愚蠢,因为这似乎很简单。二进制文件的格式为“ 0100100001001001”,而不是“ 01001000”和“ 01001001”。
public static ArrayList<String> divStr(String str,int div){
String addable = "";
ArrayList<String> ret = new ArrayList<String>();
for(int i = 0; i < str.length();i++){
addable += str.charAt(i);
if(i % div == 0 && i != 0){
ret.add(addable);
addable = "";
}
}
return ret;
}
答案 0 :(得分:1)
您可以将regex与split一起使用:
String[] ret = str.split("(?<=\\G.{" + div +"})");
如果您想返回List
:
public static List<String> divStr(String str, int div) {
return Arrays.asList(str.split("(?<=\\G.{" + div +"})"));
}
例如,调用该方法:
System.out.println(divStr("0100100001001001", 8));
>> [01001000, 01001001]
如果您用div
表示部件数量,则可以将代码更改为:
public static List<String> divStr(String str, int div) {
int length = str.length() / div;
return Arrays.asList(str.split("(?<=\\G.{" + length +"})"));
}
然后:
System.out.println(divStr("0100100001001001", 2));
>> [01001000, 01001001]
答案 1 :(得分:1)
您的代码有两个问题。
(1)条件parent
是错误的,因为说detect_cancel
,它将在i % div == 0 && i != 0
时将前9个字符添加到列表中。
(2)如果字符串div = 8
的长度不是i = 8
的倍数,则列表中将遗漏一些字符。
因此更改为:
str
答案 2 :(得分:0)
问题出在 i%div 上,它在您的代码中只出现一次,因为它从0开始到
str.length = 15,应替换为(i + 1)%div
public static ArrayList<String> divStr(String str,int div){
String addable = "";
ArrayList<String> ret = new ArrayList<String>();
for(int i = 0; i < str.length();i++){
addable += str.charAt(i);
if((i+1) % div == 0 && i != 0){
ret.add(addable);
addable = "";
}
}
return ret;
}