以10个字符为一组的序列

时间:2013-04-06 03:05:47

标签: java eclipse applet sequence stringbuffer

我正在完成这项任务,我想知道如何一次以10个字符为一组显示序列。

以下是工作程序截图: enter image description here

我想在输出框中分组10个字符,例如:

1 CTCTAACGCG CAAGCGCATA TCCTTCTAGG
61 ....

每行约60个字符,不包括空格和数字,因此必须有6个10个字符的组。

以下是我显示此输出的代码:

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();
}

谢谢,非常感谢!

2 个答案:

答案 0 :(得分:1)

运行这个程序,所以你有一个长字符串“s”,之后我只添加代码(自动计算字符的数量,当它计数到达十时,它会自动在空间之间放置,,),这将帮助您在每十个角色后添加空格,即使您不需要计算它们......

public class PracticeOne {

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

}
     }

结果是

aaaaaaaaa aaaaaaaaa aaaaa

希望这会对你有所帮助

答案 1 :(得分: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++;
   }
}