DNATranslation.java
上传用户:along415
上传日期:2018-01-31
资源大小:3k
文件大小:16k
源码类别:

DNA

开发平台:

Java

  1. import java.util.Scanner;
  2. public class DNATranslation {
  3. /**
  4.  * accepts a DNA strand and reports the protein generated, 
  5.  * if any, from the DNA strand
  6.  * @param args the command line arguments
  7.  */
  8. public static void main(String[] args) {
  9. // TODO accepts a DNA strand and reports the protein generated, 
  10. //      if any, from the DNA strand
  11. //REQUIRES : The input to contain only valid, upper-case, 
  12. //           DNA nucleotide base letters (A, C, G, and T).
  13. //           No input line will exceed 255 characters in length. 
  14. //           There will be no blank lines or spaces in the input.
  15. //EFFECTS : Accepts a DNA strand and reports the protein generated, 
  16. //          if any, from the DNA strand
  17. //          The string ``*** No translatable DNA found ***'' should be output 
  18. //          when an input DNA strand does not translate into a valid protein. 
  19. Scanner scanner = new Scanner(System.in);
  20. System.out.println("Enter the DNA strands,end with '*' :");
  21. String input = scanner.next();
  22. String output = "";
  23. while(input.equals("*") == false){
  24. input = input.replaceAll("T", "U");
  25. input = valid1(input);
  26. if(! input.equals("*** No translatable DNA found ***")&& input.length() % 3 == 0){
  27. int proteinQuantity = input.length() / 3;
  28. char [] DNAArray = new char[input.length()];
  29. for(int i = 0; i < input.length(); i++)
  30. DNAArray[i] = input.charAt(i);
  31. for(int i = 1; i < proteinQuantity; i++){
  32. // translate the DNA strands into protein
  33. switch(DNAArray[i * 3]){
  34. case 'U':{
  35. switch (DNAArray[i * 3 + 1]){
  36. case 'U':{
  37. switch(DNAArray[i * 3 + 2]){
  38. case 'U':
  39. input = input.substring(0,i * 4 -1) +  "Phe-" + input.substring(i * 4 + 2,input.length());
  40. break;
  41. case 'C':
  42. input = input.substring(0,i * 4 -1) +  "Phe-" + input.substring(i * 4 + 2,input.length());
  43. break;
  44. case 'A':
  45. input = input.substring(0,i * 4 -1) + "Leu-" + input.substring(i * 4 + 2,input.length());
  46. break;
  47. case 'G':
  48. input = input.substring(0,i * 4 -1) + "Leu-" + input.substring(i * 4 + 2,input.length());
  49. break;
  50. }
  51. break;
  52. }
  53. case 'C':{
  54. switch(DNAArray[i * 3 + 2]){
  55. case 'U':
  56. input = input.substring(0,i * 4 -1) + "Ser-" + input.substring(i * 4 + 2,input.length());
  57. break;
  58. case 'C':
  59. input = input.substring(0,i * 4 -1) + "Ser-" + input.substring(i * 4 + 2,input.length());
  60. break;
  61. case 'A':
  62. input = input.substring(0,i * 4 -1) + "Ser-" + input.substring(i * 4 + 2,input.length());
  63. break;
  64. case 'G':
  65. input = input.substring(0,i * 4 -1) + "Ser-" + input.substring(i * 4 + 2,input.length());
  66. break;
  67. }
  68. break;
  69. }
  70. case 'A':{
  71. switch(DNAArray[i * 3 + 2]){
  72. case 'U':
  73. input = input.substring(0,i * 4 -1) + "Tyr-" + input.substring(i * 4 + 2,input.length());
  74. break;
  75. case 'C':
  76. input = input.substring(0,i * 4 -1) + "Tyr-" + input.substring(i * 4 + 2,input.length());
  77. break;
  78. case 'A':
  79. input = input.substring(0,i * 4 -1) + "" + input.substring(i * 4 + 2,input.length());
  80. break;
  81. case 'G':
  82. input = input.substring(0,i * 4 -1) + "" + input.substring(i * 4 + 2,input.length());
  83. break;
  84. }
  85. break;
  86. }
  87. case 'G':{
  88. switch(DNAArray[i * 3 + 2]){
  89. case 'U':
  90. input = input.substring(0,i * 4 -1) + "Cys-" + input.substring(i * 4 + 2,input.length());
  91. break;
  92. case 'C':
  93. input = input.substring(0,i * 4 -1) + "Cys-" + input.substring(i * 4 + 2,input.length());
  94. break;
  95. case 'A':
  96. input = input.substring(0,i * 4 -1) + "" + input.substring(i * 4 + 2,input.length());
  97. break;
  98. case 'G':
  99. input = input.substring(0,i * 4 -1) + "Trp-" + input.substring(i * 4 + 2,input.length());
  100. break;
  101. }
  102. break;
  103. }
  104. }
  105. break;
  106. }
  107. case 'C':{
  108. switch (DNAArray[i * 3 + 1]){
  109. case 'U':{
  110. switch(DNAArray[i * 3 + 2]){
  111. case 'U':
  112. input = input.substring(0,i * 4 -1) + "Leu-" + input.substring(i * 4 + 2,input.length());
  113. break;
  114. case 'C':
  115. input = input.substring(0,i * 4 -1) + "Leu-" + input.substring(i * 4 + 2,input.length());
  116. break;
  117. case 'A':
  118. input = input.substring(0,i * 4 -1) + "Leu-" + input.substring(i * 4 + 2,input.length());
  119. break;
  120. case 'G':
  121. input = input.substring(0,i * 4 -1) + "Leu-" + input.substring(i * 4 + 2,input.length());
  122. break;
  123. }
  124. break;
  125. }
  126. case 'C':{
  127. switch(DNAArray[i * 3 + 2]){
  128. case 'U':
  129. input = input.substring(0,i * 4 -1) + "Pro-" + input.substring(i * 4 + 2,input.length());
  130. break;
  131. case 'C':
  132. input = input.substring(0,i * 4 -1) + "Pro-" + input.substring(i * 4 + 2,input.length());
  133. break;
  134. case 'A':
  135. input = input.substring(0,i * 4 -1) + "Pro-" + input.substring(i * 4 + 2,input.length());
  136. break;
  137. case 'G':
  138. input = input.substring(0,i * 4 -1) + "Pro-" + input.substring(i * 4 + 2,input.length());
  139. break;
  140. }
  141. break;
  142. }
  143. case 'A':{
  144. switch(DNAArray[i * 3 + 2]){
  145. case 'U':
  146. input = input.substring(0,i * 4 -1) + "His-" + input.substring(i * 4 + 2,input.length());
  147. break;
  148. case 'C':
  149. input = input.substring(0,i * 4 -1) + "His-" + input.substring(i * 4 + 2,input.length());
  150. break;
  151. case 'A':
  152. input = input.substring(0,i * 4 -1) + "Gln-" + input.substring(i * 4 + 2,input.length());
  153. break;
  154. case 'G':
  155. input = input.substring(0,i * 4 -1) + "Gln-" + input.substring(i * 4 + 2,input.length());
  156. break;
  157. }
  158. break;
  159. }
  160. case 'G':{
  161. switch(DNAArray[i * 3+ 2]){
  162. case 'U':
  163. input = input.substring(0,i * 4 -1) + "Arg-" + input.substring(i * 4 + 2,input.length());
  164. break;
  165. case 'C':
  166. input = input.substring(0,i * 4 -1) + "Arg-" + input.substring(i * 4 + 2,input.length());
  167. break;
  168. case 'A':
  169. input = input.substring(0,i * 4 -1) + "Arg-" + input.substring(i * 4 + 2,input.length());
  170. break;
  171. case 'G':
  172. input = input.substring(0,i * 4 -1) + "Arg-" + input.substring(i * 4 + 2,input.length());
  173. break;
  174. }
  175. break;
  176. }
  177. }
  178. break;
  179. }
  180. case 'A':{
  181. switch (DNAArray[i * 3 + 1]){
  182. case 'U':{
  183. switch(DNAArray[i * 3 + 2]){
  184. case 'U':
  185. input = input.substring(0,i * 4 -1) + "Ile-" + input.substring(i * 4 + 2,input.length());
  186. break;
  187. case 'C':
  188. input = input.substring(0,i * 4 -1) + "Ile-" + input.substring(i * 4 + 2,input.length());
  189. break;
  190. case 'A':
  191. input = input.substring(0,i * 4 -1) + "Ile-" + input.substring(i * 4 + 2,input.length());
  192. break;
  193. case 'G':
  194. input = input.substring(0,i * 4 -1) + "Met-" + input.substring(i * 4 + 2,input.length());
  195. break;
  196. }
  197. break;
  198. }
  199. case 'C':{
  200. switch(DNAArray[i * 3 + 2]){
  201. case 'U':
  202. input = input.substring(0,i * 4 -1) + "Thr-" + input.substring(i * 4 + 2,input.length());
  203. break;
  204. case 'C':
  205. input = input.substring(0,i * 4 -1) + "Thr-" + input.substring(i * 4 + 2,input.length());
  206. break;
  207. case 'A':
  208. input = input.substring(0,i * 4 -1) + "Thr-" + input.substring(i * 4 + 2,input.length());
  209. break;
  210. case 'G':
  211. input = input.substring(0,i * 4 -1) + "Thr-" + input.substring(i * 4 + 2,input.length());
  212. break;
  213. }
  214. break;
  215. }
  216. case 'A':{
  217. switch(DNAArray[i * 3 + 2]){
  218. case 'U':
  219. input = input.substring(0,i * 4 -1) + "Asn-" + input.substring(i * 4 + 2,input.length());
  220. break;
  221. case 'C':
  222. input = input.substring(0,i * 4 -1) + "Asn-" + input.substring(i * 4 + 2,input.length());
  223. break;
  224. case 'A':
  225. input = input.substring(0,i * 4 -1) + "Lys-" + input.substring(i * 4 + 2,input.length());
  226. break;
  227. case 'G':
  228. input = input.substring(0,i * 4 -1) + "Lys-" + input.substring(i * 4 + 2,input.length());
  229. break;
  230. }
  231. break;
  232. }
  233. case 'G':{
  234. switch(DNAArray[i * 3 + 2]){
  235. case 'U':
  236. input = input.substring(0,i * 4 -1) + "Ser-" + input.substring(i * 4 + 2,input.length());
  237. break;
  238. case 'C':
  239. input = input.substring(0,i * 4 -1) + "Ser-" + input.substring(i * 4 + 2,input.length());
  240. break;
  241. case 'A':
  242. input = input.substring(0,i * 4 -1) +  "Arg-" + input.substring(i * 4 + 2,input.length());
  243. break;
  244. case 'G':
  245. input = input.substring(0,i * 4 -1) + "Arg-" + input.substring(i * 4 + 2,input.length());
  246. break;
  247. default:
  248. input = new String("*** No translatable DNA found ***");
  249. }
  250. break;
  251. }
  252. }
  253. break;
  254. }
  255. case 'G':{
  256. switch (DNAArray[i * 3 + 1]){
  257. case 'U':{
  258. switch(DNAArray[i * 3 + 2]){
  259. case 'U':
  260. input = input.substring(0,i * 4 -1) + "Val-" + input.substring(i * 4 + 2,input.length());
  261. break;
  262. case 'C':
  263. input = input.substring(0,i * 4 -1) + "Val-" + input.substring(i * 4 + 2,input.length());
  264. break;
  265. case 'A':
  266. input = input.substring(0,i * 4 -1) + "Val-" + input.substring(i * 4 + 2,input.length());
  267.     break;
  268. case 'G':
  269. input = input.substring(0,i * 4 -1) + "Val-" + input.substring(i * 4 + 2,input.length());
  270. break;
  271. }
  272. break;
  273. }
  274. case 'C':{
  275. switch(DNAArray[i * 3 + 2]){
  276. case 'U':
  277. input = input.substring(0,i * 4 -1) + "Ala-" + input.substring(i * 4 + 2,input.length());
  278. break;
  279. case 'C':
  280. input = input.substring(0,i * 4 -1) + "Ala-" + input.substring(i * 4 + 2,input.length());
  281.     break;
  282. case 'A':
  283. input = input.substring(0,i * 4 -1) + "Ala-" + input.substring(i * 4 + 2,input.length());
  284. break;
  285. case 'G':
  286. input = input.substring(0,i * 4 -1) + "Ala-" + input.substring(i * 4 + 2,input.length());
  287. break;
  288. }
  289. break;
  290. }
  291. case 'A':{
  292. switch(DNAArray[i * 3 + 2]){
  293. case 'U':
  294. input = input.substring(0,i * 4 -1) + "Asp-" + input.substring(i * 4 + 2,input.length());
  295. break;
  296. case 'C':
  297. input = input.substring(0,i * 4 -1) + "Asp-" + input.substring(i * 4 + 2,input.length());
  298. break;
  299. case 'A':
  300. input = input.substring(0,i * 4 -1) + "Gru-" + input.substring(i * 4 + 2,input.length());
  301. break;
  302. case 'G':
  303. input = input.substring(0,i * 4 -1) + "Gru-" + input.substring(i * 4 + 2,input.length());
  304. break;
  305. }
  306. break;
  307. }
  308. case 'G':{
  309. switch(DNAArray[i * 3 + 2]){
  310. case 'U':
  311. input = input.substring(0,i * 4 -1) + "Gly-" + input.substring(i * 4 + 2,input.length());
  312. break;
  313. case 'C':
  314. input = input.substring(0,i * 4 -1) + "Gly-" + input.substring(i * 4 + 2,input.length());
  315.     break;
  316. case 'A':
  317. input = input.substring(0,i * 4 -1) + "Gly-" + input.substring(i * 4 + 2,input.length());
  318. break;
  319. case 'G':
  320. input = input.substring(0,i * 4 -1) + "Gly-" + input.substring(i * 4 + 2,input.length());
  321. break;
  322. }
  323. break;
  324. }
  325. }
  326. break;
  327. }
  328. }
  329. }
  330. output += "n" + input.substring(3,input.length()-1);
  331. }
  332. else
  333. output += "n" + "*** No translatable DNA found ***";
  334. input = scanner.next();
  335. }
  336. if(input.equals("*"))
  337. System.out.println(output);
  338. }
  339. private static String valid1 (String a) {
  340. //EFFECTS : If the DNA strands can produce valid protein sequences, translate 
  341. //          it into another strands contains letter 'U','C','G','A',
  342. //          and start with "AUG" ,ends with any of the codons UAA, UAG, or UGA; 
  343. String origin = new String(a);
  344. for(int i = 0; i < a.length(); i++){
  345. if(a.substring(i).startsWith("AUG")){
  346. a = a.substring(i);
  347. int l = a.length()/3;
  348. for(int j = 1; j < l; j++){
  349. String b = a.substring(j * 3);
  350. if(b.startsWith("UAA")||b.startsWith("UAG")||b.startsWith("UGA"))
  351. {a = a.substring(0,(j+1) * 3);
  352. return a;
  353. }
  354. }
  355. }
  356. }
  357. return valid2(origin);
  358. }
  359. private static String valid2 (String a) {
  360. //EFFECTS : If the DNA strands can produce valid protein sequences, translate 
  361. //          it into another strands contains letter 'U','C','G','A',
  362. //          and start with "AUG" ,ends with any of the codons UAA, UAG, or UGA; 
  363. String origin = new String(a);
  364. for(int i = 0; i < a.length(); i++){
  365. if(a.substring(i).startsWith("UAC")){
  366. a = a.substring(i);
  367. int l = a.length()/3;
  368. for(int j = 1; j < l; j++){
  369. String b = a.substring(j * 3);
  370. if(b.startsWith("AUU")||b.startsWith("AUC")||b.startsWith("ACU")){   
  371. a =  a.substring(0,(j+1) * 3);
  372. a = a.replaceAll("A", "M");
  373. a = a.replaceAll("U", "N");
  374. a = a.replaceAll("G", "P");
  375. a = a.replaceAll("C", "Q");
  376. a = a.replaceAll("M", "U");
  377. a = a.replaceAll("N", "A");
  378. a = a.replaceAll("P", "C");
  379. a = a.replaceAll("Q", "G");
  380. return a;
  381. }
  382. }
  383. }
  384. }
  385. return valid3(origin);
  386. }
  387. private static String valid3 (String a) {
  388. //EFFECTS : If the DNA strands can produce valid protein sequences, translate 
  389. //          it into another strands contains letter 'U','C','G','A',
  390. //          and start with "AUG" ,ends with any of the codons UAA, UAG, or UGA; 
  391. String fail = new String("*** No translatable DNA found ***");
  392. String origin = new String(a);
  393. for(int i = 0; i < a.length(); i++){
  394. if(a.substring(i).startsWith("AGU")||a.substring(i).startsWith("GAU")||a.substring(i).startsWith("AAU")){
  395. a = a.substring(i);
  396. int l = a.length()/3;
  397. for(int j = 1; j < l; j++){
  398. String b = a.substring(j * 3);
  399. if(b.startsWith("GUA")){
  400. a = a.substring(0,(j+1) * 3);
  401. StringBuffer c = new StringBuffer(a);
  402. a = c.reverse().toString();
  403. return a;
  404. }
  405. }
  406. }
  407. }
  408. return valid4(origin);
  409. }
  410. private static String valid4 (String a) {
  411. //EFFECTS : If the DNA strands can produce valid protein sequences, translate 
  412. //          it into another strands contains letter 'U','C','G','A',
  413. //          and start with "AUG" ,ends with any of the codons UAA, UAG, or UGA; 
  414. String fail = new String("*** No translatable DNA found ***");
  415. String origin = new String(a);
  416. for(int i = 0; i < a.length(); i++){
  417. if(a.substring(i).startsWith("UCA")||a.substring(i).startsWith("CUA")||a.substring(i).startsWith("UUA")){
  418. a = a.substring(i);
  419. int l = a.length()/3;
  420. for(int j = 1; j < l; j++){
  421. String b = a.substring(j * 3);
  422. if(b.startsWith("GUA")){
  423. a = a.substring(0,(j+1) * 3);;
  424. StringBuffer c = new StringBuffer(a);
  425. a = c.reverse().toString();
  426. a = a.replaceAll("A", "M");
  427. a = a.replaceAll("U", "N");
  428. a = a.replaceAll("G", "P");
  429. a = a.replaceAll("C", "Q");
  430. a = a.replaceAll("M", "U");
  431. a = a.replaceAll("N", "A");
  432. a = a.replaceAll("P", "C");
  433. a = a.replaceAll("Q", "G");
  434. return a;
  435. }
  436. }
  437. }
  438. }
  439. a = fail;
  440. return a;
  441. }
  442. }