Разделить строку на ArrayList

#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;
  }