我怎么能将这个字符串的每三个字母:ATGCCACTATGGTAG
保存在一个数组中,每三个字母用逗号分隔。
这就是我所拥有的:
参数序列是上面的混乱字母。
public static void listCodons(String sequence){
int length = sequence.length();
String[] listOfCodons = new String[length];
for(int i = 0; i< length; i++){
//This is where I'm not sure what to do
listOfCodons = sequence[i]+sequence[i+1]+sequence[i+2];
}
}
System.out.print(Arrays.toString(listOfCodons));
}
答案 0 :(得分:1)
首先,这是语法错误的代码,有很多错误。第一个是for循环后的两个}
,第二个是方法的引爆结束,因此System.out.print
之后的listCodons
方法超出了[index]
方法的范围,因此它是一个错误。
第二个错误是在java中,无法使用.charAt(index)
访问字符串中的字符,而是必须使用ATGCCACTATGGTAG
。
如果我正确理解您的问题,您希望参数["ATG", "CCA", "CTA", "TGG", "TAG"]
成为public static void listCodons(String sequence) {
int length = sequence.length();
String[] listOfCodons = new String[length / 3];
for (int i = 0; i < listOfCodons.length; i++) {
listOfCodons[i] = sequence.substring(i * 3, i * 3 + 3);
}
System.out.print(Arrays.toString(listOfCodons));
}
的数组。如果是这种情况,这是解决方案,有固定的问题:
i * 3
使用1/3长度的刺,因为我们一次需要3个字符。 i * 3 + 3
是字符串时间3的当前位置,以便更正标记的开头,{{1}}是从此位置接下来的3个字符。这里唯一的问题是标签长度是否一致,但没有相关信息。
答案 1 :(得分:0)
根据@shikjohari answer on SO发布的链接,你可以像
一样解决它public class Split {
public static void listCodons(String sequence) {
String[] listOfCodons = sequence.split("(?<=\\G...)");
System.out.print(Arrays.toString(listOfCodons));
}
public static void main(String[] args) throws Exception {
listCodons("ATGCCACTATGGTAG");
}
}
从上述链接复制的说明:正则表达式(?&lt; = \ G ...)匹配一个空字符串,该字符串包含最后一个匹配(\ G),后跟三个字符(...)之前((?&lt; =))。
答案 2 :(得分:0)
代码:
public static void listCodons(String sequence)
{
Iterable<String> pieces = Splitter.fixedLength(3).split(sequence);
// note this is Java 8 Lambda Syntax
pieces.forEach(pi -> System.out.println(pi));
// If you can not use Java 8 take the following:
for (String piece : pieces)
{
System.out.println(piece);
}
}
答案 3 :(得分:0)
假设序列的长度为9,并且您希望对每三个字符进行分组。 这为您提供了以下分组:
注意每个组中的第一个字符是如何以3的倍数编制索引的。 您可以在代码中使用此提示。
public static void listCodons(String sequence){
/** If your sequence has n characters, then
/* dividing it into groups of three results in
/* n/3 groups. */
int length = sequence.length();
String[] listOfCodons = new String[length/3];
for(int i = 0; i< length/3; i++) {
/** Remember: the first character of each codon
/* is indexed in the sequence by a multiple
/* of three. */
listOfCodons[i] = sequence.substring(3*i, 3*(i+1));
}
System.out.print(Arrays.toString(listOfCodons));
}
那是怎么回事?
让我们使用您的原始示例ATGCCACTATGGTAG
。
序列的长度为15。
因此,我们最终会得到15/3 = 5个密码子。
每个密码子i
将由3*i
,3*i+1
和3*i+2
索引的字符组成。
所以你取相应的子串并将其添加到密码子列表中。
希望这有帮助。
答案 4 :(得分:0)
Try this code :
public static void listCodons(String sequence){
int length = (sequence.length()/3);
String[] listOfCodons = new String[length];
int j=0,i=0;
while(i<sequence.length() && j<listOfCodons.length){
listOfCodons[j++]=sequence.substring(i, i+3);
i+=3;
}
System.out.println(Arrays.toString(listOfCodons));
}