需要接收一个字符并在星号java中打印出它的形状

时间:2015-11-07 17:00:03

标签: java

我必须制作一个用户输入3个字母的程序,然后程序用星号打印出来。 EX为1个字母: http://imgur.com/oPPO0Bs我可以创建一个数组,其中包含字母表中每个字符的形状,但我想知道是否有更简单的方法来链接它。是否有一些方法可以获得char和符号,并打印出该符号中char的形状。

2 个答案:

答案 0 :(得分:10)

这是一个简洁的解决方案,使用优秀的旧AWT在Comic Sans中渲染你的文字,用于踢腿和咯咯笑声:

import static java.awt.image.BufferedImage.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

public class ASCIIRenderer {
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(System.in))) {
            String text = null;
            while ((text = reader.readLine()) != null) {
                // Dummy image to calculate bitmap width / height of your text
                BufferedImage img = new BufferedImage(1, 1, TYPE_INT_ARGB);
                Graphics2D g2d = img.createGraphics();
                Font font = new Font("Comic Sans MS", Font.PLAIN, 24);
                g2d.setFont(font);
                FontMetrics fm = g2d.getFontMetrics();
                int width = fm.stringWidth(text);
                int height = fm.getHeight();
                g2d.dispose();
                // Real image
                img = new BufferedImage(width, height, TYPE_INT_ARGB);
                g2d = img.createGraphics();
                g2d.setFont(font);
                fm = g2d.getFontMetrics();
                g2d.drawString(text, 0, fm.getAscent());
                g2d.dispose();
                for (int y = 0; y < img.getHeight(); y++) {
                    for (int x = 0; x < img.getWidth(); x++) {
                        System.out.print(0 == img.getRGB(x, y) ? "  " : "**");
                    }
                    System.out.println();
                }
            }
        }
    }
}

credits to most of the above code go to MadProgrammer

运行它,键入类似ABC的内容并获取此内容:

                  **                   ************                            ************
                ******                 ****************                    ****************
                ******                 ****        ******                ******        ****
              ********                 ****          ******            ******          ****
              ********                 ****            ****            ****                
            ******  ****               ****            ****          ******                
          ********  ****               ****            ****        ******                  
          ******    ****               ****          ******        ****                    
        ********      **               ****        ******          ****                    
        ******        ****             ****************          ****                      
        ******************             ****************          ****                      
      ********************             ****        ********      ****                      
    **********          ****           ****            ******    ****                      
    ******              ****           ****              ****    ****                ****  
    ******              ****           ****              ****      ****            ******  
  ******                ******         ****            ****        ******      ********    
  ******                  ****         ****      **********          ****************      
  ****                    ****         ****************                **********          
                                       ************                                        

答案 1 :(得分:4)

没有简单的方法可以做到这一点。 char没有形状。 char只是065535之间的数字,恰好在您打印时会显示为单个字符。

您必须为字母表中的每个字母设计自己的模式,并且使用数组将是最简单的方法。