Java 字框模式

Java word box pattern

我正在尝试创建一个方框图案,将单词作为输入并将其打印为方框。

我可以在顶部、底部和左侧工作,但我不确定如何在右侧工作。

更具体地说,我不知道如何让系统输出从顶行最后一个字母开始的单词。

有人有什么想法吗?

java-11

您可以使用String#repeat来重复所需的空格数,如下所示:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter a word: ");
        String word = in.nextLine();
        int len = word.length();

        // Top line
        for (int i = 0; i < len; i++) {
            System.out.print(word.charAt(i) + " ");
        }

        System.out.println();

        // Left and right letters
        for (int i = 1; i < len - 1; i++) {
            System.out.println(word.charAt(i) + " ".repeat((len - 2) * 2 + 1) + word.charAt(len - i - 1));
        }

        // Bottom line
        for (int i = len - 1; i >= 0; i--) {
            System.out.print(word.charAt(i) + " ");
        }
    }
}

样本运行:

Enter a word: Hello
H e l l o 
e       l
l       l
l       e
o l l e H 

另一个样本运行:

Enter a word: World
W o r l d 
o       l
r       r
l       o
d l r o W 

在 Java-11 之前:

String#repeat 与 Java-11 一起引入。如果您使用 Java-11 之前的 Java 版本,则需要使用嵌套循环复制此功能,如下所示:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter a word: ");
        String word = in.nextLine();
        int len = word.length();

        // Top line
        for (int i = 0; i < len; i++) {
            System.out.print(word.charAt(i) + " ");
        }

        System.out.println();

        // Left and right letters
        for (int i = 1; i < len - 1; i++) {
            System.out.print(word.charAt(i));
            for (int j = 1; j <= (len - 2) * 2 + 1; j++) {
                System.out.print(" ");
            }
            System.out.println(word.charAt(len - i - 1));
        }

        // Bottom line
        for (int i = len - 1; i >= 0; i--) {
            System.out.print(word.charAt(i) + " ");
        }
    }
}

创建框的左侧时,您还需要在右侧添加字母,可以通过添加空格然后添加字母来实现,如下所示:

...
for (int index = 1; index + 1 < word.length(); index++)  // left side and right side
{
     System.out.print(word.charAt(index) + " ");
     for (int i = 1; i < word.length() - 1; i++)
     {
          System.out.print("  ");
     }

     System.out.print(word.charAt(word.length() - index - 1) + "\n");
}
...

您可以使用String.format("%" + (length+2) + "s", "")打印space

这里length表示输入单词的长度

完整代码:

public class Main {

    public static void main(String args[]){
       Scanner in = new Scanner(System.in);
       System.out.println("Enter a word");
       String word = in.next();
       int length = word.length();
       String startWord = word.replace(""," ").trim();
       StringBuilder stringBuilder = new StringBuilder(startWord);
       System.out.println(stringBuilder.toString());
        for (int i = 1; i <length-1 ; i++) {
            System.out.println(word.charAt(i)+String.format("%" + (length+2) + "s", "") +word.charAt(length-1-i));
        }
        System.out.println(stringBuilder.reverse().toString());
    }

}