2015-01-14 4 views
0

내 프로그램은 정규 표현식 [gcatGCAT]으로 제한된 문자열을 가져 와서 해당 문자열을 보완 문자의 문자열로 변환합니다. 보완 문자는 g ~ c, c ~ g, a ~ u, t ~ a입니다.내 문자열이 보유하거나 사용할 수있는 char 데이터의 양은 어느 정도입니까?

예를 들어, 사용자 입력 문자열 "gact"는 "cuga"를 생성해야합니다.

그러나 길이가 50 자 이상인 문자열을 입력 할 때 (얼마 동안 입력했는지 계산하지 못했을 때 잠시 동안 키보드의 g 및 c 키를 눌렀습니다.) 내 컴퓨터의 RAM, 프로그램이 멈추었 고 내 운영 체제 배경이 바뀌 었습니다. (나는 무서웠 기 때문에 그것을 시도하고 재현하고 싶지 않았다.)

큰 문자열을 입력하고 연산을 수행하기에는 너무 많은 램을 사용하고 있는가? 그게 문제라면 많은 메모리를 사용하지 않기 위해 이것을 단순화 할 수있는 방법이 있습니까? 나는 현실적으로 200 ~ 500자를 받아들이는 것을 좋아할 것입니다. 1000 명이 가장 적합합니다. 나는 코딩에 초보자이므로 어쨌든 내가 틀렸다면 나를 용서해주십시오.

import java.text.DecimalFormat; 
import javax.swing.SwingUtilities; 
import javax.swing.JOptionPane; 
import java.util.Random; 

//getting my feet wet, 1/13/2015, program is to take a strand of nucleotides, G C A T, for DNA and give 
//the complementary RNA strand, C G U A. 

public class practiceSixty { 

public static void main(String[] args){ 
SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 

     String input = null; 

     boolean loopControl = true; 

     char nucleotide; 

     int repeat; 

    do{ 
      do{ 
      input = JOptionPane.showInputDialog(null, " Enter the sequence of nucleotides(G,C,A and T) for DNA, no spaces "); 

      }while(!input.matches("[GCATgcat]+")); //uses regular expresions, This method returns true if, and only if, this string matches the given regular expression. 


      JOptionPane.showMessageDialog(null, "the data you entered is " + input); 

      StringBuilder dna = new StringBuilder(input); 

      for(int i = 0; i < input.length(); i++) 
      { 
      nucleotide = input.charAt(i); 

       if(nucleotide == 'G' || nucleotide == 'g') 
       { 
        dna.setCharAt(i, 'c'); 
       } 
       else if(nucleotide == 'C' || nucleotide == 'c') 
       { 
        dna.setCharAt(i, 'g'); 
       } 
       if(nucleotide == 'A' || nucleotide == 'a') 
       { 
        dna.setCharAt(i, 'u'); 
       } 
       else if(nucleotide == 'T' || nucleotide == 't') 
       { 
        dna.setCharAt(i, 'a'); 
       } 
      } 
      JOptionPane.showMessageDialog(null, "the DNA is , " + input + " the RNA is " + dna); 

      repeat = JOptionPane.showConfirmDialog(null, "Press Yes to continue, No to quit ", "please confirm", JOptionPane.YES_NO_OPTION); 

      }while(repeat == JOptionPane.YES_OPTION); 
} 
}); 
} 
} 
+0

코드를 올바르게 들여 씁니다. –

+1

코드가 50 자 이상으로 어떻게 쓰이는지 보지 못합니다. 코드 가독성이 약간 향상 될 수 있지만 나에게는 충분히 효율적으로 보일 수 있습니다. 프로그램이 실제로 CPU 시간을 소비합니까? –

+0

@ValentinRuano 어떻게 결정할 지 모르겠습니다. 내가 아는 건 50 명 이상의 캐릭터들과 조금 씩 얼어 버렸고 프로그램을위한 GUI는 검게되었다. 그래도 감사합니다. –

답변

1

그냥 string.replace()를 사용할 수 있습니다. 그러나 당신은 다른 것을 대체 할 수 없습니다. 왜냐하면 그것은 나중에 대체하게 될 것이기 때문입니다.

input = input.toLowerCase(); 
input = input.replace('a','1'); 
input = input.replace('c','2'); 
input = input.replace('g','3'); 
input = input.replace('t','4'); 
input = input.replace('1','u'); 
input = input.replace('2','g'); 
input = input.replace('3','c'); 
input = input.replace('4','a'); 
+0

각 대체품에 대해 새로운 문자열을 만드는 것은 과잉이라고 생각합니다. 더 잘할 수 있습니다. –

+0

EDIT : 죄송합니다. StringBuffer가 아니라 String이라고 생각했습니다. 그렇다고하더라도 원래의 질문 코드가 더 효율적이라고 여겨집니다. –