You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现每行第20位插星号、生成星号正方形及按空格截断需求

解决星号正方形排版与按空格截断文本问题

核心问题解决:形成完整星号正方形

当前输出的最后一行右侧星号不对齐,根源是该行文本长度不足20字符。要让所有行的右侧星号完全对齐,只需把每行文本补空格到固定20字符长度,这样每行结构都是* + 20字符(含空格) + *,和上下边框的22个星号完全匹配。

实现起来很简单:用String.format把截取到的文本左对齐补空格,固定长度为20。示例代码片段:

String paddedPart = String.format("%-" + numberOfCharacters + "s", part);

次要需求:按空格截断避免拆分单词

如果不想硬切20字符导致单词被拆分,可以每次截取时,找20字符位置之前的最后一个空格作为截断点。如果这段文本里没有空格(比如超长单词),再按20字符硬切。

具体逻辑:

  1. 先计算初始的截断结束位置(不超过字符串总长度)
  2. 在初始结束位置之前找最后一个空格的索引
  3. 如果找到的空格在当前起始位置之后,就用这个索引作为截断点;否则保持初始结束位置
  4. 循环步长改成实际截取的长度,而非固定20

完整修改代码

package StarBorder;

import java.util.Scanner;

public class NewTry {

    public static void main(String[] args) {
        System.out.println("Please input a word: ");
        Scanner stringScanner = new Scanner(System.in);
        String input = stringScanner.nextLine();
        int numberOfCharacters = 20;
        // 边框是22个星号(* + 20字符 + *)
        System.out.println("**********************");
        
        int i = 0;
        while (i < input.length()) {
            int end = Math.min(i + numberOfCharacters, input.length());
            // 找当前范围内最后一个空格的位置
            int lastSpace = input.lastIndexOf(' ', end - 1);
            
            // 如果找到有效空格,就用这个位置截断
            if (lastSpace > i) {
                end = lastSpace;
            }
            
            String part = input.substring(i, end);
            // 补空格到20字符长度,保证右侧星号对齐
            String paddedPart = String.format("%-" + numberOfCharacters + "s", part);
            System.out.println("*" + paddedPart + "*");
            
            // 移动到下一段起始位置
            i = end;
            // 跳过截断点的空格,避免重复输出
            if (i < input.length() && input.charAt(i) == ' ') {
                i++;
            }
        }
        
        System.out.println("**********************");
        stringScanner.close();
    }
}

效果展示

输入原文本Hello I am doing some code, hello there people on stack overflow,输出会变成:

**********************
*Hello I am doing som*
*e code, hello ther  *
*e people on stack   *
*overflow             *
**********************

所有行的右侧星号完全对齐,形成完整正方形,同时单词不会被拆分。

内容的提问来源于stack exchange,提问作者Nick Slack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:34:56