Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从列表中提取每三个字母并将其保存为数组?_Java_Arrays_String_For Loop_Methods - Fatal编程技术网

Java 如何从列表中提取每三个字母并将其保存为数组?

Java 如何从列表中提取每三个字母并将其保存为数组?,java,arrays,string,for-loop,methods,Java,Arrays,String,For Loop,Methods,我怎么能让这个字符串的每三个字母:ATGCCACTATGGTAG保存在一个数组中,每三个字母之间用逗号分隔。 这就是我所拥有的: 参数序列是上面的一堆字母 public static void listCodons(String sequence){ int length = sequence.length(); String[] listOfCodons = new String[length]; for(int i = 0; i< length;

我怎么能让这个字符串的每三个字母:
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));
}
publicstaticvoidlistcodons(字符串序列){
int length=sequence.length();
String[]listofconds=新字符串[长度];
for(int i=0;i
根据@shikjohari发布的链接,您可以像

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");
    }
}
公共类拆分{
公共静态无效列表密码子(字符串序列){

String[]listofconds=sequence.split((?首先,这是语法错误的代码,有很多错误。第一个是for循环之后的两个
}
,第二个是引爆方法末尾的
系统.out.print
之后的
超出了
listCodons
方法的范围,因此它是一个错误

第二个错误是在java中,不能使用
[index]
访问字符串中的字符,必须使用
.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));
}
publicstaticvoidlistcodons(字符串序列){
int length=sequence.length();
String[]listofconds=新字符串[length/3];
for(int i=0;i

使用sting长度的1/3,因为我们一次取3个字符。
i*3
是字符串乘以3的当前位置,以获得标记的正确开头,
i*3+3
是从此位置取下3个字符。这里唯一的问题是如果标记长度不一致,但没有相关信息。

更多信息更聪明、更容易阅读是使用

这就是代码:

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);
    }
}
publicstaticvoidlistcodons(字符串序列)
{
Iterable pieces=拆分器。固定长度(3)。拆分(顺序);
//注意这是Java8Lambda语法
pieces.forEach(pi->System.out.println(pi));
//如果不能使用Java 8,请执行以下操作:
用于(弦乐作品:作品)
{
系统输出打印件(件);
}
}

假设序列长度为9,并且您希望每三个字符分组一次。 这将为您提供以下分组:

  • 字符0、1和2
  • 字符3、4和5
  • 字符6、7和8
请注意,每个组中的第一个字符是如何以3的倍数进行索引的。 您可以在代码中使用此思想

publicstaticvoidlistcodons(字符串序列){
/**如果序列有n个字符,则
/*将其分成三组,结果是
/*n/3组*/
int length=sequence.length();
String[]listofconds=新字符串[length/3];
对于(int i=0;i
那么到底发生了什么? 让我们使用原始示例
ATGCCACTATGGTAG
。 该序列的长度为15。 因此,我们最终将得到15/3=5个密码子。 每个密码子
i
将由
3*i
3*i+1
3*i+2
索引的字符组成。 所以你需要相应的子串,并将其添加到密码子列表中

希望这有帮助。

尝试以下代码:
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));
    }
公共静态无效列表密码子(字符串序列){ int length=(sequence.length()/3); String[]listofconds=新字符串[长度]; int j=0,i=0;
while(iString)有一个名为substring()的方法。请在javadoc中查找。@Marina Claire类似的内容,
listofconds[0]=ATG,listofconds[1]=TGC
。所以我看不到任何问题?请看一看这个问题@jbniset子字符串只能用于字符串,虽然可能更容易阅读,但更难理解。此外,标准java库中不支持拆分器,它是其中的一部分。这段代码有什么更难理解的?她没有它仅限于使用标准java库。这不适合我,但对新手来说可能很容易,我怀疑对java不熟悉的人会直接进入java 8的新内容。为什么要使用库来拆分字符串呢?哦,对了,我们在谈论java,最好导入10个库来让我的简单测试程序工作。你知道吗出了有效的java?她说过这是一个“测试程序”。别生气,兄弟;-)我同意使用库,但人们学会使用库来做最小的事情,项目就会发展。学会何时使用它们,而不仅仅是使用它们。如果你能用两行本机代码来完成,为什么还要添加整个库呢?我可能太喜欢DIY了,但镜像的一面是程序员创造了依赖性hel很快。祝你管理这样的项目好运。@ManuZi我在发布的链接中添加了解释。这使得数组超出了范围exception@MarinaClaire怎么做?我测试过了,不可能有数组越界异常。我说过它不会为不一致的长度提供预期的输出,但它适用于任意字符串长度,我测试过在长度为0到1M的情况下,它不会抛出任何异常。您确定在此处发布时使用的是确切的代码,并且它是n吗