我想忽略除A,G,T,C之外的所有其他字符,但是当我将N放在字符串的末尾时,它会输出00.输出应为00 0101 1010 1111, 但是它是00 0101 1010 1111 00.我在switch语句中使用了默认情况,因为我认为这会忽略除列出的字符之外的所有其他字符。有什么我做错了吗?
import java.util.BitSet;
public class Main {
public static void main(String[] args){
String originalString = "aCCGGAATTN";
int bitSetSize = 2 * originalString.length();
BitSet bitSet = new BitSet(bitSetSize);
originalString = originalString.toUpperCase();
for (int i = 0; i < originalString.length(); i++) {
switch(originalString.charAt(i)){
case 'A':
bitSet.clear(i * 2);
bitSet.clear(i * 2 + 1);
break;
case 'C':
bitSet.clear(i * 2);
bitSet.set(i * 2 + 1);
break;
case 'G':
bitSet.set(i * 2);
bitSet.clear(i * 2 + 1);
break;
case 'T':
bitSet.set(i * 2);
bitSet.set(i * 2 + 1);
break;
default:
break;
}
}
// print all the bits in the bitset
for (int i = 0; i < bitSetSize; i++) {
if (bitSet.get(i))
System.out.print("1");
else
System.out.print("0");
}
}
}
答案 0 :(得分:0)
问题就在于switch
,这是因为您在原始的未经过滤的字符串中使用索引来决定要设置哪些位。
使用两个不同的变量来跟踪输入和输出索引:
for (int i = 0, j = 0; i < originalString.length(); i++) {
switch(originalString.charAt(i)){
case 'A':
bitSet.clear(j * 2);
bitSet.clear(j * 2 + 1);
j++;
break;
...
}
}