java switch语句不忽略未列出的情况

时间:2016-11-04 21:31:44

标签: java string switch-statement bitset

我想忽略除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");
       }
   }
}

1 个答案:

答案 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;

      ...

      }

  }