在 java 中将字符串转换为位向量
Convert String into bitvector in java
我想根据字符位值(用户指定)将字符串转换成对应的位向量。我正在处理基因组字符串,其中我只有 4 个字符,即 A、G、C、T。我想用 java
中的以下位值表示它们
A = 01
G = 11
C = 10
T = 00
现在给定一个字符串"AGGT"那么它对应的位值应该是01111100。我试过如下:
BitSet A = new BitSet(2);
BitSet G = new BitSet(2);
BitSet C = new BitSet(2);
BitSet T = new BitSet(2);
A.set(01);
G.set(00);
C.set(11);
T.set(10);
String p = "AGGT";
BitSet bb = new BitSet();
for(int i = 0, n = p.length() ; i < n ; i++) {
bb.set(p.charAt(i))
}
我做错了什么?如何以正确的方式做到这一点?
正如@Thomas 所指出的,BitSet.set(int)
并没有像您预期的那样工作。
public void set(int bitIndex)
Sets the bit at the specified index to true.
因此:G.set(00)
不会将 G
的两位设置为 0
:它将 G
的第二位(位置 1)设置为 true
.
但是您不会使用最初创建的位集:如果您在字符串中遇到 A
,您实际上是将第 66 位(位置 65)设置为 true
, 因为 65 是字符文字 'A'
.
的整数值
最简单的方法就是在循环中进行切换:
Bitset bb = new BitSet(2 * p.length());
for (int i = 0; i < p.length(); ++i) {
switch (p.charAt(i)) {
case 'A':
bb.set(2*i + 0, false);
bb.set(2*i + 1, true);
break;
case 'G':
bb.set(2*i + 0, false);
bb.set(2*i + 1, false);
break;
// etc.
}
}
(没有必要将位设置为 false
;但它只是更明确一点)。
我想根据字符位值(用户指定)将字符串转换成对应的位向量。我正在处理基因组字符串,其中我只有 4 个字符,即 A、G、C、T。我想用 java
中的以下位值表示它们A = 01
G = 11
C = 10
T = 00
现在给定一个字符串"AGGT"那么它对应的位值应该是01111100。我试过如下:
BitSet A = new BitSet(2);
BitSet G = new BitSet(2);
BitSet C = new BitSet(2);
BitSet T = new BitSet(2);
A.set(01);
G.set(00);
C.set(11);
T.set(10);
String p = "AGGT";
BitSet bb = new BitSet();
for(int i = 0, n = p.length() ; i < n ; i++) {
bb.set(p.charAt(i))
}
我做错了什么?如何以正确的方式做到这一点?
正如@Thomas 所指出的,BitSet.set(int)
并没有像您预期的那样工作。
public void set(int bitIndex)
Sets the bit at the specified index to true.
因此:G.set(00)
不会将 G
的两位设置为 0
:它将 G
的第二位(位置 1)设置为 true
.
但是您不会使用最初创建的位集:如果您在字符串中遇到 A
,您实际上是将第 66 位(位置 65)设置为 true
, 因为 65 是字符文字 'A'
.
最简单的方法就是在循环中进行切换:
Bitset bb = new BitSet(2 * p.length());
for (int i = 0; i < p.length(); ++i) {
switch (p.charAt(i)) {
case 'A':
bb.set(2*i + 0, false);
bb.set(2*i + 1, true);
break;
case 'G':
bb.set(2*i + 0, false);
bb.set(2*i + 1, false);
break;
// etc.
}
}
(没有必要将位设置为 false
;但它只是更明确一点)。