2017-06-05 145 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 ******************** 
*************************************************************** 

如果中心標題爲偶數量字符,包括空格的(意思是一個一側或另一側將會有一個額外的星號),將額外的星號放在左側,這樣一切仍然看起來居中。

任何人有任何想法如何做到這一點?

+2

它的基本的算術......只是使用'consoleLineSeparatorLength'和'title.Length'和相減,減2(關於標題的兩邊的空格),再除以2。(您可能需要如果標題和控制檯行分隔符具有不同的奇偶校驗,則在一側添加一個額外的* *。) – Jashaszun

回答

1

以下是關於如何實現輸出的答案,您可以在不同情況下重用(在控制檯中打印輸出,寫入文本文件,在日誌中使用等)。它基本上是一樣的第一個答案,但使用的StringBuilder,並返回其建立輸出字符串。這樣,您也可以將字符串用於其他地方。我檢查了你的例子輸出和一切都適合。

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 ;'因爲它打印了1或2個額外的astrisk,然後添加一個if條件在結尾添加另一個astrisk,如果該行比'consoleLineSeparatorLength'少一個字符。除此之外,這工作。謝謝。 –