попытка добавить подстроку в массив через каждый третий символ

#java

#java

Вопрос:

Короче говоря, я пытаюсь взять строку, затем разделить ее на каждые три символа, добавляя эти три символа в массив по мере его выполнения.

Начальный ввод в функцию (RawData) выглядит примерно так:

 ATGCCACTATGGTAG
 

но может различаться по длине.

Я пытаюсь преобразовать приведенные выше данные (представляющие нуклеотиды) в отдельные кодоны следующим образом:

 [ATG,CCA,CTA,TGG,TAG]
 

обратите внимание, что каждый фрагмент из 3 теперь индексируется в массив.
Это мой код:

 public static void codonList(String rawData) {
        int previous = 0;
        String[] codons = new String[rawData.length() / 3];

        for (int i = 0; i < rawData.length(); i  ) {

            previous  ;
            // goes through each
            // split at every third then append to end of codon string
            if (previous % 3 == 0) {
                String chunk = rawData.substring(previous - 3, previous);
                codons[i] = chunk;
                System.out.println(Arrays.toString(codons));
            }
        }

    }
 

и его вывод:

 [null,null,AGT,null,null]
 

Я на 90% уверен, что это простое решение, но, похоже, не могу его понять. Если кто-то может дать некоторое представление, это было бы очень ценно!

Комментарии:

1. ПОДСКАЗКА: String chunk = rawData.substring(i*3, i*3 3); . И избавиться от previous .

Ответ №1:

У вас есть несколько проблем.

  1. вы перебираете всю строку, вы хотите создавать только rawData.length()/3 кодоны.
  2. Как намекнул Кевин, получите 3 символа: String chunk = rawData.substring(i*3, i*3 3);
  3. выводите массив только после завершения обработки строки.
     public static void codonList(String rawData) {
        String[] codons = new String[rawData.length() / 3];

        for (int i = 0; i < rawData.length() / 3; i  ) {
            // goes through each
            // split at every third then append to end of codon string
            String chunk = rawData.substring(i*3, i*3 3);
            codons[i] = chunk;
        }
        System.out.println(Arrays.toString(codons));
    }
 

Вывод:

[ATG, CCA, CTA, TGG, TAG]

Комментарии:

1. да, все эти решения, которые вы, ребята, предоставили, отлично работают, приятно видеть несколько методов. Наличие этой печати внутри цикла for было просто для целей отладки. Забыл вернуть его обратно. Спасибо за информацию!