Java限制输出行长度代码异常,求问题排查思路
问题分析与修复方案
我来帮你拆解下代码里的几个问题,这些问题共同导致了你的输出异常:
1. 单词长度检查的循环完全没执行
你写的单词长度检查循环条件是for (int x = 0; x >= seperatedWords.length; x++),这里x >= seperatedWords.length一开始就不成立(x初始是0,数组长度肯定大于0),所以这个循环根本不会跑,等于直接跳过了单词长度检查的逻辑。应该改成x < seperatedWords.length。
2. 每行末尾的多余空格
每次添加单词时你都拼接了" ",比如outputString += seperatedWords[j] + " ";,这就导致每行末尾多了一个不必要的空格。可以调整拼接逻辑:只有当outputString不为空时,才在单词前加空格,从根源避免末尾空格。
3. 最后一行内容未输出
循环结束后,outputString里还存着最后一行的内容,但你没有打印它。所以在循环结束后,需要判断outputString是否为空,如果不为空就把剩余内容打印出来。
修正后的完整代码
import java.util.Scanner; public class TextSplitter { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); System.out.print("Type a sentence: "); String originalText = keyboard.nextLine(); String[] separatedWords = originalText.split(" "); int check = 0; // 修复循环条件,正确检查每个单词长度 for (int x = 0; x < separatedWords.length; x++) { if (separatedWords[x].length() > 16) { System.out.println("The input includes a word longer than 16 characters."); check = 1; break; } } String outputString = ""; if (check == 0) { for (int j = 0; j < separatedWords.length; j++) { // 计算当前行加上新单词后的长度(考虑空格) int nextLength = outputString.isEmpty() ? separatedWords[j].length() : outputString.length() + 1 + separatedWords[j].length(); if (nextLength <= 16) { // 非空时先加空格,再拼单词,避免末尾空格 outputString = outputString.isEmpty() ? separatedWords[j] : outputString + " " + separatedWords[j]; } else { // 输出当前行,重置outputString为当前单词 System.out.println(outputString); outputString = separatedWords[j]; } } // 打印最后一行剩余内容 if (!outputString.isEmpty()) { System.out.println(outputString); } } keyboard.close(); } }
测试你的输入
输入:There are a dozen fuzzy bunnies sleeping under the couch.
修正后的输出会是:
There are a dozen fuzzy bunnies sleeping under the couch.
没有多余空格,且最后一行正常输出。
内容的提问来源于stack exchange,提问作者KingCoder
相关产品推荐
相关产品推荐

