检查字符串中的每个字符是否属于给定的字符集(JAVA)

时间:2013-02-28 10:40:09

标签: java

所以我需要创建一个方法isValidDNA,其工作原理如下:

  

public boolean isValidDNA()

     

如果DNA有效,则返回true,即仅包含字母,   A,T,C,G(大写)和至少一个这些字符。

我能想到的只是这个,显然不起作用:

    public boolean isValidDNA(){
    for (int i=0;i<dna.length();i++){
        if (dna.charAt(i)=='A' || dna.charAt(i)=='T' || dna.charAt(i)=='C' || dna.charAt(i)=='G' ){
            return true;
        }
        return false;
    }
}

6 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式: - [ATCG]+在代码中,这可能如下所示:

public boolean isValidDNA(){
    return dna.matches("^[ATCG]+$")
}

答案 1 :(得分:1)

您立即生成一个return语句,它将在第一次迭代期间退出并仅检查第一个字符。

您需要将此信息存储在布尔值中,并在检查完整个字符串后返回它:

public boolean isValidDNA(String dna){
  Boolean result = true;
  // Add an extra check for the "at least one character" thing.
  for (int i=0; i<dna.length(); i++){
    if (dna.charAt(i)!='A' && dna.charAt(i)!='T' && dna.charAt(i)!='C' && dna.charAt(i)!='G' ){
        result = false;
    }
  }
  return result;
}

但是,最好使用regular expressions来解决这些问题。

答案 2 :(得分:1)

以这种方式尝试:

public boolean isValidDNA(){
    boolean res = true;
    for (int i=0;i<dna.length();i++){
        if ((dna.charAt(i) != 'A') && (dna.charAt(i)!='T') && (dna.charAt(i)!='C') && (dna.charAt(i)!='G') ){
            res = false;
            break;  
        }
    }
    return res;
}

如果您的起始点是DNA有效,那么测试它是否真的如此容易得多。您只需要测试dna的每个字符,并且可以在第一个不满足if语句的条目处停止。

答案 3 :(得分:1)

用你的方式,你几乎得到它。

现在,如果找到一个没问题,则返回true,如果一切都错误,则只返回false。您可以否定if条件,并在找到确定的条件后立即返回false,如果一切正常,则只返回true

我会把编码部分留给你。

正如其他人所指出的,正则表达式将是一个更清洁的解决方案。

答案 4 :(得分:1)

您可以尝试此实施。

首先声明一个常量:

private static final String bases = "ATCG";

然后在这样的方法中使用它:

public boolean isValidDNA() {
    boolean isValid = true;
    for (char c : dna.toCharArray()) {
        if (bases.indexOf(c) < 0) {
            isValid = false;
            break;
        }
    }
    return isValid;
}

答案 5 :(得分:1)

Scanner sc = new Scanner(System.in);
System.out.print("Enter a DNA sequence: ");
seq=sc.nextLine();    
    if(seq.matches(".*[^ATCG].*")){
        System.out.println("Not a valid sequence.");
        System.exit(0);
}

这个正则表达式有效,只有包含A,C,T或G但没有包含其他字符,空格等的序列才会继续