0

我有像 ACTG - - CAGT G - - 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);

      }

   }
}
4

4 回答 4

2

您可以使用 String 的replace()实例方法。

String newString = s.replace("-", "0");

您也可以将它们链接在一起。

newString = s.replace("G","1").replace("A","2").replace("T","3").replace("C","4");

replace返回一个带有替换的新字符串,因为 String 是一个不可变的类。

如果您的测试数据非常大(我的意思是非常非常大),则可能值得编写您自己的替换方法,该方法仅在字符串中循环一次并替换每个字符。测试并查看仅使用几个替换是否存在性能问题。

于 2013-08-12T15:48:13.867 回答
1

您可以按如下方式设置地图:

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
于 2013-08-12T15:57:15.180 回答
0

readLine 给你一行字符串

0) 使用键 G、A、T、C 和值 1、2、3、4 创建地图

1) 从 String 行获取字符数组

2) 创建一个变量 charVal

3) 遍历字符数组

4) 对于每个字符,将 charVal 初始化为 0,从映射中获取该字符的值,将其分配给 charVal

5)打印charVal

PS:正确关闭资源

于 2013-08-12T15:48:38.750 回答
0

正如 Sotirios 所说,使用 aMap将键绑定到其相应的值。您可以对其进行迭代Map并应用于replace()您拥有的字符串(抱歉格式不佳):

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()一次来进行所有替换。

于 2013-08-12T15:59:22.297 回答