0

我正在处理这项任务,我想知道如何一次显示 10 个字符的序列。

下面是工作程序截图: 在此处输入图像描述

我想在输出框中分组 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();
}

谢谢,非常感谢!

4

2 回答 2

1

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

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 回答