PTA 7-33 空心字母金字塔(StringBuilder应用实例)

7-33 空心字母金字塔 (10 分)

输入一个大写的英文字母,输出空心的字母金字塔。

输入格式:
一个大写英文字母。

输出格式:
一个空心的大写英文字母金字塔,其中第1层的“A”在第1行的第40列,列从1开始计数。

输入样例:
E

输出样例:
                                       A
                                      B B
                                     C   C
                                    D     D
                                   EEEEEEEEE
import java.util.Scanner;


public class Main {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        String N = scanner.nextLine();
        StringBuilder b = new StringBuilder("                                       "); //39个空格
        String c = " ";
        int k = 1;
        for (char i = 'A'; i < N.charAt(0); i++) {
            System.out.print(b);
            if (i == 'A'){
                System.out.println(i);
            }else {
                System.out.print(i);
                System.out.print(c);
                System.out.println(i);
                c += "  ";
            }
            b.delete(0,1);
            k++;
        }
        System.out.print(b);
        for (int i = 0; i < 2*k -1; i++) {
            System.out.print(N);
        }
    }
}

代码解释

1.StringBuilder 

在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生。     


一、创建Stringbuilder对象
StringBuilder strB = new StringBuilder();       
1、append(String str)/append(Char c):字符串连接
System.out.println("StringBuilder:"+strB.append("ch").append("111").append('c'));
//return "StringBuilder:ch111c"

2、toString():返回一个与构建起或缓冲器内容相同的字符串
System.out.println("String:"+strB.toString());
//return "String:ch111c"

3、appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
System.out.println("StringBuilder.appendCodePoint:"+strB.appendCodePoint(2));
//return "StringBuilder.appendCodePoint:ch111c"

4、setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
strB.setCharAt(2, 'd');
System.out.println("StringBuilder.setCharAt:" + strB);
//return "StringBuilder.setCharAt:chd11c"

5、insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)
System.out.println("StringBuilder.insertString:"+ strB.insert(2, "LS"));
//return "StringBuilder.insertString:chLSd11c"
System.out.println("StringBuilder.insertChar:"+ strB.insert(2, 'L'));
//return "StringBuilder.insertChar:chLLSd11c"

6、delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println("StringBuilder.delete:"+ strB.delete(2, 4));
//return "StringBuilder.delete:chSd11c"
2.charAt()      
charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。

3.使用string N的原因是为了可以在循环中使用,不引起数据类型错误。
4. b.delete(0,1);       
使用b.delete 每循环一次减去一个39个空格中的一个。
5.for (char i = 'A'; i < N.charAt(0); i++)
循环次数小于N.charAt(0)时,
System.out.print(b);//输出39个空格
            if (i == 'A'){
                System.out.println(i);
            }else {
                System.out.print(i);
                System.out.print(c);
                System.out.println(i);
                c += "  ";//下一个字母中间增加2个空格
            }
            b.delete(0,1);//每循环一次删除一个空格
            k++;
循环次数等于N.charAt(0)时,
 System.out.print(b);//输出39个空格
        for (int i = 0; i < 2*k -1; i++) {
            System.out.print(N);//输出2*k -1个最后字母
        }
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值