[英]assigning values to characters in java
我有ACTG--CAGTG--CA之类的序列,我存储在一个文本文件中。 如果文件中有-我想分配值0并显示0而不是i,并且G,A,T,C等于1,2,3,4
import java.io.*;
public class file
{
public static void main(String args[]) throws Exception
{
FileReader fr=new FileReader("TESTDATA_HPV_34_1.txt");
BufferedReader br=new BufferedReader(fr);
String s;
while((s=br.readLine())!=null)
{
System.out.println(s);
}
}
}
您可以使用String的replace()
实例方法。
String newString = s.replace("-", "0");
您也可以将它们链接在一起。
newString = s.replace("G","1").replace("A","2").replace("T","3").replace("C","4");
replace
返回一个带有replace
的新字符串,因为String是一个不可变的类。
如果您的测试数据非常大(我的意思是非常大),那么可能值得编写自己的replace方法,该方法仅在字符串中循环一次并替换每个字符。 测试并查看仅使用几个替换项是否存在性能问题。
您可以如下设置地图:
Map<Character, Integer> map = new HashMap<Character, Integer>(5);
map.put('-', 0);
map.put('G', 1);
map.put('A', 2);
map.put('T', 3);
map.put('C', 4);
现在,您可以执行以下操作:
String dna = "A C T G - - C A G T G - - C A";
StringBuilder result = new StringBuilder(dna.length());
for (int i = 0; i < dna.length(); i++) {
char c = dna.charAt(i);
if (map.containsKey(c))
result.append(map.get(c));
else
result.append(c);
}
System.out.println(result);
2 4 3 1 0 0 4 2 1 3 1 0 0 4 2
readLine给您一行为String
0)使用键G,A,T,C和值1,2,3,4创建地图
1)从字符串行获取字符数组
2)创建一个变量charVal
3)遍历字符数组
4)对于每个字符,将charVal初始化为0,从map中获取该char的值,并将其分配给charVal
5)打印charVal
PS:正确关闭资源
正如Sotirios所说,请使用Map
将键绑定到其相应的值。 您可以对该Map
进行迭代,然后将replace()
应用于您拥有的String(对不起,格式不正确):
import java.io.*;
public class file
{
public static void main(String args[]) throws Exception
{
Map<Character, Character> replacements = new HashMap<Character, Character>();
replacements.put('-', '0');
replacements.put('G', '1');
// ....
FileReader fr=new FileReader("TESTDATA_HPV_34_1.txt");
BufferedReader br=new BufferedReader(fr);
String s;
while((s=br.readLine())!=null) {
for ( Map.Entry<Character, Character> entry : replacements.entrySet() ) {
s = s.replace(entry.getKey(), entry.getValue());
}
System.out.println(s);
}
}
}
正如Cemafor所说,如果您担心性能,那么也许应该使用String.replaceAll()
一次进行所有替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.