#java #arrays #string #split
#java #массивы #строка #разделить
Вопрос:
Я пытаюсь разделить строку на массивы. Предполагается, что в целом программа должна превращать двоичный файл в строку, но проблема, с которой я сталкиваюсь, заключается в разделении строки на массивы. Я чувствую себя глупо, потому что это кажется простой вещью. двоичный файл выглядит следующим образом «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 amp;amp; i != 0){
ret.add(addable);
addable = "";
}
}
return ret;
}
Комментарии:
1. Поможет ли substring ?
Ответ №1:
В вашем коде есть 2 проблемы.
(1) Условие i % div == 0 amp;amp; i != 0
неверно, потому что, скажем div = 8
, оно добавит первые 9 символов в список, когда i = 8
.
(2) Если длина строки str
не кратна 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){
ret.add(addable);
addable = "";
}
}
if (!addable.isEmpty()) ret.add(addable);
return ret;
}
Ответ №2:
Вы можете использовать разделение с регулярным выражением следующим образом :
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]
Ответ №3:
Проблема в 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 amp;amp; i != 0){
ret.add(addable);
addable = "";
}
}
return ret;
}