Разделите строку в ArrayList - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь разделить строку на массивы. Предполагается, что общая программа превращает бинарный файл в строку, но проблема в том, что я делю строку на массивы. Я чувствую себя глупо, потому что это кажется простым делом. двоичный файл выглядит как «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;
  }

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Есть 2 проблемы с вашим кодом.
(1) Условие i % div == 0 && 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;
}
1 голос
/ 29 марта 2019

Вы можете использовать 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]
0 голосов
/ 29 марта 2019

Проблема в 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;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...