Rosalind

Rosalind是一个生物信息编程学习网站。抛出了一系列生物学问题,引导使用者通过编程语言解决。网站官方推荐使用python解决,python得益于丰富的开源包,其解决方法在CSDN中也多有涉及。小编使用的主语言是java,因此简单通过CSDN社区进行Java学习笔记记录,不足之处也请大家多多指点~

先来看一下问题描述:

Counting DNA Nucleotides

Problem
A string is simply an ordered collection of symbols selected from some alphabet and formed into a word; the length of a string is the number of symbols that it contains.

An example of a length 21 DNA string (whose alphabet contains the symbols ‘A’, ‘C’, ‘G’, and ‘T’) is “ATGCTTCAGAAAGGTCTTACG.”

Given: A DNA string s of length at most 1000 nt.
Sample input

GAGTTAGGAATTCGGTCGCGAAACTTGCGATCGTGTTACGGCCTGGGTCATTACGAAATTCCCTAGCTCCGCAGTGTTCCTGGAGTGCCATGTCGTCGCTGCCATGCTCAACCGAGAGCAGCCCGTACTACGTGTCTGGTCCTTACAGGACCTAAGCGAATCAATGTGACTACTTTCATAGGTAGGGTTTGTCGTGTCATGGATACGTCTGACAACAACTCGTGGTTGGGGCTGCGCGCATTGATTGTGAGCGAAATACTCGCAAACCAGACTGTCTGAGATAGTCACATCAGACAACCCTGGTCTCTAGCAAAAATCGTTTTCCTATAAATCACGTAACGCAGTAATCTTCAGGCCTCGCGCCAGTCCGCGATAAGACCATCCCCTGCCCTATCCCGCTAATGGCGAGACCCAAAGGACGAGCCTACGACGATCATCGGACAATCAAGGCGGAAGACGCTAGCACTGATTCTTCGGCTCCTAGACAGCGTAGATTTCAGCTATCACCATAATTTTGGTCGTACGGAGGCCCTTTCCCTCGTCAACTCTGTGTCCACGTACGTAACCAGCCACGACAGTATCTTAAACTCCATGGGTCATATATTCGTACAAGTCCGTCGATTAAGCGTTATGGGCTGCTAATTAGACTCCACCTATGCAGGAGTTGTTGTACCGCATCGGCGATTATCCGCCACTCGAAGAAGTTTAACTGCCTATTATATCTTTGGAGACACTGGTTATGTTTTAATACGCACGCATCTTAGTTCAACGGGACGTGGGCGCACGAGCTATCCTGCTAGGATACTTCACTCGCTTCAGTCACCTATGTCTAGGCCCACTATAAGCCGTGACAT

Return: Four integers (separated by spaces) counting the respective number of times that the symbols ‘A’, ‘C’, ‘G’, and ‘T’ occur in s.


简单来说就是通过输入核酸序列,以ACGT的顺序返回相应的碱基数目。解决方法如下~~

import java.util.Scanner;public class Counting_DNA_Nucleotides {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入核酸序列:");//键盘录入核酸序列String line = sc.nextLine();//存储录入的核酸序列为String类型int a=0;int c=0;int g=0;int t=0;for (int i = 0; i <line.length();i++){switch (line.charAt(i)){//括号中的输出类型为char类型,匹配后面的字符时需要将字符加单引号转化为对应的ASCII码方可匹配。case 'A':case 'a':a++;break;case 'C':case 'c':c++;break;case 'G':case 'g':g++;break;case 'T':case 't':t++;break;default:System.out.println("第"+(i+1)+"位不是ACTG");break;}}System.out.println("ACGT分别为:"+a+" "+c+" "+g+" "+t);}
}

Sample output

ACGT分别为:207 229 198 220

但是有些小伙伴不想通过手动输入核酸序列,这里也为大家提供了读取txt文本文件并输出碱基数的方法。两个方法都可行,下述代码只是在上述代码基础上增加了读取文本文件的步骤。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;public class Counting_DNA_Nucleotides_ReadFile {public static void main(String[] args) {//手动输入Rosalind网站下载的输入文件rosalind_dna.txt的路径地址到filePath中String filePath = "C:/Users/Administrator/Desktop/rosalind_dna.txt";System.out.println("核酸序列读取完毕,结果如下:");System.out.println(readFileContent(filePath));String line = readFileContent(filePath);int a=0;int c=0;int g=0;int t=0;for (int i = 0; i <line.length();i++) {switch (line.charAt(i)) {//括号中的输出类型为char类型,匹配后面的字符时需要将字符加单引号转化为对应的ASCII码方可匹配。case 'A':case 'a':a++;break;case 'C':case 'c':c++;break;case 'G':case 'g':g++;break;case 'T':case 't':t++;break;default:System.out.println("第" + (i + 1) + "位不是ACTG");break;}}System.out.println("ACGT分别为:"+a+" "+c+" "+g+" "+t);}//定义方法,输入文本文件路径,以字符串类型返回文本内容public static String readFileContent(String fileName) {File file = new File(fileName);BufferedReader reader = null;StringBuffer sbf = new StringBuffer();try {reader = new BufferedReader(new FileReader(file));String tempStr;while ((tempStr = reader.readLine()) != null) {sbf.append(tempStr);}reader.close();return sbf.toString();} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {e1.printStackTrace();}}}return sbf.toString();}
}

Sample output

核酸序列读取完毕,结果如下:
GAGTTAGGAATTCGGTCGCGAAACTTGCGATCGTGTTACGGCCTGGGTCATTACGAAATTCCCTAGCTCCGCAGTGTTCCTGGAGTGCCATGTCGTCGCTGCCATGCTCAACCGAGAGCAGCCCGTACTACGTGTCTGGTCCTTACAGGACCTAAGCGAATCAATGTGACTACTTTCATAGGTAGGGTTTGTCGTGTCATGGATACGTCTGACAACAACTCGTGGTTGGGGCTGCGCGCATTGATTGTGAGCGAAATACTCGCAAACCAGACTGTCTGAGATAGTCACATCAGACAACCCTGGTCTCTAGCAAAAATCGTTTTCCTATAAATCACGTAACGCAGTAATCTTCAGGCCTCGCGCCAGTCCGCGATAAGACCATCCCCTGCCCTATCCCGCTAATGGCGAGACCCAAAGGACGAGCCTACGACGATCATCGGACAATCAAGGCGGAAGACGCTAGCACTGATTCTTCGGCTCCTAGACAGCGTAGATTTCAGCTATCACCATAATTTTGGTCGTACGGAGGCCCTTTCCCTCGTCAACTCTGTGTCCACGTACGTAACCAGCCACGACAGTATCTTAAACTCCATGGGTCATATATTCGTACAAGTCCGTCGATTAAGCGTTATGGGCTGCTAATTAGACTCCACCTATGCAGGAGTTGTTGTACCGCATCGGCGATTATCCGCCACTCGAAGAAGTTTAACTGCCTATTATATCTTTGGAGACACTGGTTATGTTTTAATACGCACGCATCTTAGTTCAACGGGACGTGGGCGCACGAGCTATCCTGCTAGGATACTTCACTCGCTTCAGTCACCTATGTCTAGGCCCACTATAAGCCGTGACAT
ACGT分别为:207 229 198 220

Rosalind Java| Counting DNA Nucleotides相关推荐

  1. Rosalind-001:统计核苷酸数目(Counting DNA Nucleotides)

    题目: 统计核苷酸数目(Counting DNA Nucleotides) Given: A DNA string ss of length at most 1000 nt. 所给:一条被命名为ss的 ...

  2. Rosalind Java| Counting Point Mutations

    Rosalind编程问题之计数核酸序列突变数. Counting Point Mutations Problem Given two strings s and t of equal length, ...

  3. Rosalind Java|Locating Restriction Sites

    Rosalind编程问题之检索限制性位点. Locating Restriction Sites Problem: A DNA string is a reverse palindrome if it ...

  4. Rosalind Java|Open Reading Frames

    Rosalind编程问题之读取开放阅读框. Open Reading Frames Problem Either strand of a DNA double helix can serve as t ...

  5. Rosalind Java|Matching Random Motifs

    Rosalind编程问题之计算随机序列出现并匹配待比对序列的概率. 跟Rosalind Java|Introduction to Random Strings有异曲同工之妙. Matching Ran ...

  6. Rosalind Java| Complementing a Strand of DNA

    Rosalind编程问题之反向互补序列. Complementing a Strand of DNA Problem In DNA strings, symbols 'A' and 'T' are c ...

  7. Rosalind Java| Computing GC Content

    Rosalind编程问题之计算GC含量. Computing GC Content Problem The GC-content of a DNA string is given by the per ...

  8. Rosalind Java| Finding a Shared Motif

    Rosalind编程问题之寻找共有的motif. Finding a Shared Motif Problem A common substring of a collection of string ...

  9. Rosalind Java|Overlap Graphs

    Rosalind编程问题之查找重叠区段. Overlap Graphs Problem: A graph whose nodes have all been labeled can be repres ...

最新文章

  1. iOS中UIActionSheet使用详解
  2. 四个角度教你评估一个产品的用户体验好坏 | PMCAFF
  3. SpringBoot中yml文件报错:org.yaml.snakeyaml.scanner.ScannerException:mapping values are not allowe here...
  4. Lvs+keepalived 高可用性负载均衡自动化配置
  5. linux开机启动rsync,【Linux】rsync同步文件 程序自启动
  6. Java生鲜电商平台-团购模块设计与架构
  7. python numpy ndarray之basic operations
  8. AsyncTask 源码流程简析
  9. 前端开发需要掌握什么技术,成为一个高薪的web前端程序员很难吗?
  10. Error : Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so
  11. java基于ssm人体健康体检信息管理系统-springboot
  12. mysql 告警日志_错误日志监控报警脚本
  13. ssdt函数索引号_获得SSDT函数名和索引号的代码
  14. 狼性精神——《世界上最伟大的推销员》
  15. VB中MID如何使用
  16. iframe去除边框
  17. Oracle的profile
  18. 如何更新R以及RStudio
  19. 多线程 分段 爆破crc32 C#C/C++ (一)
  20. Linux设置支持中文

热门文章

  1. Flume官方文档翻译之(三)
  2. Windows系统中vscode+MSVC的C++配置
  3. 在win10系统中安装Visual C++ 6.0的具体方法
  4. 亚利桑那州立大学周纵苇:研习 U-Net ——现有的分割网络创新 | AI 研习社74期大讲堂...
  5. python——列表
  6. Eclipse java 字体的设置(最佳字体推荐)
  7. clock_gettime获取系统时间
  8. C语言求1到20的阶乘之和
  9. 论文阅读——(邬江兴院士) 网络空间内生安全综述 Cyberspace Endogenous Safety and Security
  10. kubectl describe