2013-04-28 89 views
-1

我目前正在执行此任务。在任务的第一部分,它要求我用布尔值检查一个字符串。仅当输入字符串的每个字符都是a,c,c,g,G,t或T中的一个时才返回true和true。如果字符串为null或空,则返回false。我有点失落,因为我不知道如何比较它。我正在查看使用数组并检查字符串的for循环。这是一个可行的选择吗?如果没有,我应该看看有没有其他的选择?带字符串的布尔方法

这是我的代码到目前为止。我把字符串s写成小写字母,以便比较容易,只用4个字符即​​可。

public static boolean isDNASequence(String s) { 
    boolean isDNASequnce = false; 
    char [] acceptableInput = {'a', 'c', 'g', 't'}; 
    String x = s.toLowerCase(); 

我是一个非常大的Java小白所以请原谅我,如果我不知道在这里我的方式:d

+1

你应该试一下,并张贴您有麻烦一些代码。然后我们可以给你提示和帮助你。 – 2013-04-28 04:10:20

回答

1

尝试使用正则表达式使用。
图案[aAcCgGtT]+应该符合您的要求。

如:

public static boolean isDNASequence(s) { 
    return s.matches("^[aAcCgGtT]+$"); 
} 

为了进一步解释,在报价模式说来匹配: ^ - 从字符串 [aAcCgGtT]的开始 - 所有这些字符 +的 - 至少一次 $ - 到字符串末尾

+0

你是怎么做到的?我很抱歉,因为我真的无能为力 – Doh 2013-04-28 04:37:11

+0

已更新。看一看。 – lizard 2013-04-28 15:56:11

0

我想这是你在找什么。

public static boolean isDNASequence(String s) { 
    char[] acceptableInput = { 'a', 'c', 'g', 't' }; 
    String x = s.toLowerCase(); 

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

     boolean isAcceptable = false; 

     for (int j = 0; j < acceptableInput.length; j++) { 
      if (x.charAt(i) == acceptableInput[j]) 
       isAcceptable = true; 
     } 

     if (isAcceptable == false) 
      return false; 

    } 
    return true; 

} 
0

您可以在Java文档中找到方法String.matches()。如果字符串匹配正则表达式,它将返回true。

正则表达式模式[aAcCgGtT]+可能是你在找什么。

我觉得this是学习正则表达式的很好的指南!

0

试试这个

public static boolean isDNASequence(String s) { 
    for (int i = 0; i < s.length(); i++) { 
     if ("AaCcGgTt".indexOf(s.charAt(i)) == -1) { 
      return false; 
     } 
    } 
    return true; 
}