0

私はこの課題に取り組んでおり、一度に 10 文字のグループでシーケンスを表示する方法を知りたいと思っていました。

以下は、作業中のプログラムのスクリーンショットです。 ここに画像の説明を入力

たとえば、出力ボックスで 10 文字をグループ化したい:

1 CTCTAACGCG CAAGCGCATA TCCTTCTAGG
61 ....

スペースと数字を除いて、各行は約 60 文字なので、10 文字のグループが 6 つ必要です。

以下は、この出力を表示するために作成したコードです。

public void dispLines() {
    // Get the selected value of characters per line and assign it to noc variable
    String noc = numOfChar.getSelectedItem().toString();
    // Call StringBuffer object and assign sb variable to it
    StringBuffer sb = new StringBuffer();
    // Assign raw dna data to dna variable, where string will be mutated
    String dna = rawDNAInput.getText();
    // Create newdna variable to store the newly created data
    String newdna = "";
    // Loop through the size of raw dna
    for (int i = 0 ; i < dna.length (); ++i)
    {
        // Assign every single character to StringBuffer sb
        sb.append(dna.charAt (i));              
    }       
    // Assign the StringBuffer sb values to the newdna variable
    newdna = sb.toString();
    // Recall StringBuffer object, so new data can be assigned
    sb = new StringBuffer();
    // Assign start varaible of 0
    int start = 0;
    // Assign end varaible to be start + number of characters per line
    int end = start + Integer.parseInt(noc);
    // Keep looping till end value is less than the length of the dna
    while(end < newdna.length())
    {
        // Append values into StringBuffer sb varaible by calling makeNumberedStr method
        sb.append(makeNumberedStr(newdna.substring(start, end), start + 1));
        // Increment start variable by the selected numbers of characters per line
        start += Integer.parseInt(noc);
        // Increment end variable by the selected numbers of characters per line
        end += Integer.parseInt(noc);
    }
    // Append values into StringBuffer sb varaible by calling makeNumberedStr method
    sb.append (makeNumberedStr (newdna.substring (start), start + 1));
    String result = sb.toString();
    for(int i = 0; i < result.length(); i++) {

    }
    // Check to make sure uppercase is selected, if it is then make every character uppercase, else make them lowercase
    if(upperCase.isSelected()) {
        DNAOutput.setText(result.toUpperCase());
    } else if(lowerCase.isSelected()) {
        DNAOutput.setText(result.toLowerCase());
    }  
}

/*
 * makeNumberedStr
 * This method only displays required number of characters per line
 * @parameters String x and integer num
 * @returns new StringBuffer value
 */
private String makeNumberedStr (String s, int num)
{
    // makes and returns a string composed from left to right of:
    //   a 6 character field containing right justified [num] followed by 2 spaces
    //   the string s followed by \n
    // Call new StringBuffer object and give it a length of raw dna + 8
    StringBuffer sb = new StringBuffer (s.length ());
    // Create nstr String varaible and give it value of num
    String nstr = String.valueOf (num);
    // Loop through the nstr length and append blank space
    for (int i = 0 ; i < 6 - nstr.length () ; ++i)
        sb.append (' ');
    // Check if display number is selected, or else do not display number on every line
    if(indexNum.isSelected() == true)
        sb.append (nstr + "  ");
    // Append s value to String Buffer
    sb.append (s);
    // Append new line to StringBuffer
    sb.append ('\n');        
    // Return StringBuffer text
    return sb.toString();
}

ありがとうございました。

4

2 に答える 2

1

このプログラムを実行すると、長い文字列 "s" ができます。その後、コードを追加するだけです (文字を自動的にカウントし、10 に達すると、,, の間にスペースが自動的に挿入されます)。数える必要がなくても、10文字ごとにスペースを追加してください...

public class PracticeOne {

public static void main(String [] args)
{
    String s = "aaaaaaaaaaaaaaaaaaaaaaaaa";
    System.out.println(s.replaceAll(".{10}", "$0 "));

}
     }

結果は

あああああああああああああああああああああ

これがあなたを助けることを願っています

于 2013-04-06T03:53:02.677 に答える
0

正規表現を使用せずに (これが Akshay GOel の回答が作成された方法です)、以下のような方法で StringBuffer にスペースを追加できます。各行の先頭に 5 ~ 6 文字の数字を使用していると思います。

//Inserts spaces every 10 characters.
//@parm from The index of the buf to begin counting to insert the spaces.
private static void addSpaces(StringBuilder buf, int from) {
   for(int i=from+10; i<buf.length(); i+=11) {
      buf.insert(i,' ');
      // i++;
   }
}
于 2013-04-06T08:51:31.917 に答える