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吗