2017-06-05 11 views
-2

私はこの方法をコンソールで行区切り記号として使用しています。文字列の文字列の長さに一致する文字列を自動入力する

public class Test { 
    private int consoleLineSeparatorLength = "***************************************************************".length(); 

    private void printTitleLineSeparator(String title){ 
     String lineTitleSeperatorBorder = ""; 
     String lineTitleSeperator = "* " + title + " *"; 
     for(int charInString = 0; charInString < consoleLineSeparatorLength; charInString++){ 
      lineTitleSeperatorBorder += "*"; 
     } 

     System.out.println(); 
     System.out.println(lineTitleSeperatorBorder); 
     System.out.println(lineTitleSeperator); 
     System.out.println(lineTitleSeperatorBorder); 
     System.out.println(); 
    } 

    public static void main(String[] args) { 
     Test tester = new Test(); 

     tester.printTitleLineSeparator("Select Character"); 
     tester.printTitleLineSeparator("Select Stats"); 
     tester.printTitleLineSeparator("Select Display Method"); 

    } 
} 

電流出力...

*************************************************************** 
* Select Character * 
*************************************************************** 


*************************************************************** 
* Select Stats * 
*************************************************************** 


*************************************************************** 
* Select Display Method * 
*************************************************************** 

の予想される出力...

*************************************************************** 
*********************** Select Character ********************** 
*************************************************************** 


*************************************************************** 
************************* Select Stats ************************ 
*************************************************************** 


*************************************************************** 
******************** Select Display Method ******************** 
*************************************************************** 

センターのタイトルが文字の空白を含むのも、量がある場合(片側または他の意味アスタリスクが1つ追加されます)、左に余分なアスタリスクを入れて、すべてがまだ中央に見えるようにします。

誰でもこれを行う方法はありますか?

+2

それは...ちょうど(あなたが必要な場合があります 'consoleLineSeparatorLength'と' title.Length'を使用し、それらを引く、(タイトルのいずれかの側のスペースのため)2を減算し、2で割る基本的な算術です – Jashaszun

答えて

1

ここでは、離れたところであなたの出力を達成するための答えです(コンソールで印刷する、テキストファイルに書き込む、ログに書き込むなど)。これは基本的に最初の答えと同じですが、StringBuilderを使用して出力をStringとして構築して返します。この方法で他の場所の文字列を使用することもできます。私はあなたのサンプル出力をチェックし、すべてが合っています。

private final static int lineLength = 63; 

public static void printSeparatorTitle(String heading) { 

    System.out.println(createSeparator(lineLength)); 
    System.out.println(createSeparator(lineLength, heading)); 
    System.out.println(createSeparator(lineLength)); 
} 

public static String createSeparator(int length) { 

    final StringBuilder builder = new StringBuilder(); 
    while (length-- > 0) { 
     builder.append("*"); 
    } 
    return builder.toString(); 
} 

public static String createSeparator(int length, String heading) { 

    final int position = (length - heading.length() - 1)/2; 
    final StringBuilder builder = new StringBuilder(); 
    while (builder.length() < position) { 
     builder.append("*"); 
    } 

    builder.append(' ').append(heading).append(' '); 

    while (builder.length() < length) { 
     builder.append("*"); 
    } 
    return builder.toString(); 
} 

public static void main(String[] args) { 

    printSeparatorTitle("Select Character"); 
    printSeparatorTitle("Select Stats"); 
    printSeparatorTitle("Select Display Method"); 

    // checking expected output: 
    System.out.println("*********************** Select Character **********************" 
      .equals(createSeparator(63, "Select Character"))); 

    System.out.println("************************* Select Stats ************************" 
      .equals(createSeparator(63, "Select Stats"))); 

    System.out.println("******************** Select Display Method ********************" 
      .equals(createSeparator(63, "Select Display Method"))); 
} 
+0

また素晴らしいソリューションです。 if文で余分なアスタリスクを管理する必要はありません。 –

2

はどのように

String header = "Test Header"; 

int desiredLength = 50; 
int split = (desiredLength - header.length())/2; 

for (int x = 0; x < split; x++) { 

    System.out.print("*"); 
} 

System.out.print(" " + header + " "); 

for (int x = 0; x < split; x++) { 

    System.out.print("*"); 
} 

のようなものについてはこれは明らかに大幅に改善することができますが、概念がまだ保持しています。

希望の長さを取って、あなたが持っている文字の長さを減算し、半分にカットして文字列の両側に印刷します。

奇数の文字を使用する場合は、特別な処理が必要です。

+1

'int split =((this.consoleLineSeparatorLength - title.length())/ 2)行を変更しなければならなかった。 ; 'それは1つまたは2つ余分なastriskを印刷していたので、行が' consoleLineSeparatorLength'よりも1文字少ない場合は、別のastriskを最後に追加するif条件を追加します。それ以外はこれが成功した。ありがとう。 –

関連する問題