2017-06-05 90 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'少一个字符。除此之外,这工作。谢谢。 –