如何在Java中查找char[] seqarr
中前三个字符是否为A/a, T/t, G/g
(不区分大小写)
我试过这个
for(int i = 0; i <= 2; i++){
if(seqarr[i] == 'A'|| seqarr[i] == 'a' ||seqarr[i] == 'T' ||seqarr[i] == 't'|| seqarr[i] == 'G'|| seqarr[i] == 'g' ){
return true;
}
答案 0 :(得分:3)
如果使用字符串而不是字符数组,这将更容易处理 。这样做的原因是,使用当前的方法,您需要为每个起始模式检查三个单独字符中的每一个,三次。话虽这么说,解决这个问题的一种方法是将字符数组转换回字符串并在那里进行检查:
public boolean isValid(char[] array) {
if (array.length < 3) {
return false;
}
// create string from only first 3 characters of array
String str = new String(array, 0, 3);
return str.equalsIgnoreCase("atg");
}
char[] array = {'A', 't', 'G', 'c', '/', 'C', 'G'}; // ... and more data
isValid(array);
这种方法应该运行良好,因为它避免了从字符数组创建冗长的字符串。我们只需要前三个字符来执行检查。
答案 1 :(得分:3)
更容易使用字符串,但不必要:您可以简单地处理单个字符,将它们大写以标准化以用于大小写:
return arr.length >= 3
&& Character.toUpperCase(arr[0]) == 'A'
&& Character.toUpperCase(arr[1]) == 'T'
&& Character.toUpperCase(arr[2]) == 'G';
这可以避免创建任何对象,因此可能比转换为String
更快。
您也可以明确地了解大小写变体:
(arr[0] == 'A' || arr[0] == 'a')
而不是Character.toUpperCase
等等。缺点是,在复制和粘贴时获取正确的大写/小写对很容易出错(如@ Tim&#39;以下评论:A/t
,而不是A/a
)。
答案 2 :(得分:1)
您可以使用indexOf
代替char数组,并使用String s = new String(seqarr);
s = s.toLowerCase();
System.out.println(s.indexOf("atg") == 0);
方法。
update prices p inner join
example e on p.UPC=e.UPC AND p.id=6
set p.price= e.example_price;
答案 3 :(得分:1)
您可以使用copyValueOf
中的String
将char
数组转换为String
。然后使用equalsIgnoreCase
进行比较。
public boolean isValid(char[] seqarr) {
return String.copyValueOf(seqarr, 0, 3).equalsIgnoreCase("atg");
}
答案 4 :(得分:1)
如果我的问题是正确的,那么您想要查找前三个字符是否为ATG
,是否按顺序排列,如
ATGsomething
aTGsomething
AtGsomething
Atgsomething
...
然后你也可以使用正则表达式
来做到这一点String str = String.valueOf(seqarr);
if(str.matches("^[Aa][Tt][Gg]")) {
return true;
}
您也可以稍微调整一下代码
if( seqarr.length>=3 && (seqarr[0] == 'A'|| seqarr[0] == 'a') && (seqarr[1] == 'T' ||seqarr[1] == 't') && (seqarr[2] == 'G'|| seqarr[2] == 'g' ){
return true;