Java实现每行第20位插星号、生成星号正方形及按空格截断需求
解决星号正方形排版与按空格截断文本问题
核心问题解决:形成完整星号正方形
当前输出的最后一行右侧星号不对齐,根源是该行文本长度不足20字符。要让所有行的右侧星号完全对齐,只需把每行文本补空格到固定20字符长度,这样每行结构都是* + 20字符(含空格) + *,和上下边框的22个星号完全匹配。
实现起来很简单:用String.format把截取到的文本左对齐补空格,固定长度为20。示例代码片段:
String paddedPart = String.format("%-" + numberOfCharacters + "s", part);
次要需求:按空格截断避免拆分单词
如果不想硬切20字符导致单词被拆分,可以每次截取时,找20字符位置之前的最后一个空格作为截断点。如果这段文本里没有空格(比如超长单词),再按20字符硬切。
具体逻辑:
- 先计算初始的截断结束位置(不超过字符串总长度)
- 在初始结束位置之前找最后一个空格的索引
- 如果找到的空格在当前起始位置之后,就用这个索引作为截断点;否则保持初始结束位置
- 循环步长改成实际截取的长度,而非固定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
相关产品推荐
相关产品推荐

