如何消除Java代码输出结果末尾的空格?技术求助
嗨,这个末尾多空格的问题我太熟啦!本质原因就是你在输出每个符合条件的字符串时,不管是不是最后一个都加了空格,导致收尾多出来一个。给你几个简单的解决办法,顺便帮你优化下代码结构~
问题根源
假设你原来的输出逻辑是类似这样的:
// 伪代码 for (String word : validWords) { System.out.print(word + " "); }
这种写法会让每一个单词后面都带空格,包括最后一个,自然就出现了多余空格的问题。
解决方案1:用StringBuilder拼接结果(兼容所有Java版本)
把符合条件的单词先收集到StringBuilder里,添加时判断是否是第一个元素,非第一个的话先加空格再加单词,最后一次性输出:
import java.util.Scanner; import java.util.HashSet; class Words { // 类名首字母大写,符合Java编码规范 public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("请输入若干字符串(输入完成后按回车+Ctrl/D结束):"); StringBuilder resultBuilder = new StringBuilder(); while (sc.hasNext()) { String str = sc.next(); if (!hasDuplicateChars(str)) { if (resultBuilder.length() != 0) { // 如果已有内容,先加空格再拼单词 resultBuilder.append(" "); } resultBuilder.append(str); } } // 最后一次性输出,无末尾空格 System.out.println(resultBuilder); sc.close(); } // 把检测重复字符的逻辑单独抽成方法,代码更清晰 private static boolean hasDuplicateChars(String str) { HashSet<Character> charSet = new HashSet<>(); for (char c : str.toCharArray()) { // HashSet的add方法如果返回false,说明字符已存在 if (!charSet.add(c)) { return true; } } return false; } }
解决方案2:用List+String.join(Java 8+推荐)
如果你的Java版本是8及以上,用这个方法更简洁:把符合条件的单词放到List里,然后用String.join()自动拼接,它会帮你处理好空格,绝对不会有末尾多余空格:
import java.util.Scanner; import java.util.HashSet; import java.util.ArrayList; import java.util.List; class Words { public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("请输入若干字符串(输入完成后按回车+Ctrl/D结束):"); List<String> validWords = new ArrayList<>(); while (sc.hasNext()) { String str = sc.next(); if (!hasDuplicateChars(str)) { validWords.add(str); } } // 用空格分隔拼接所有有效单词,无末尾空格 System.out.println(String.join(" ", validWords)); sc.close(); } private static boolean hasDuplicateChars(String str) { HashSet<Character> charSet = new HashSet<>(); for (char c : str.toCharArray()) { if (!charSet.add(c)) { return true; } } return false; } }
额外小优化
我还帮你调整了几个细节:
- 类名改成了
Words,符合Java首字母大写的编码规范 - 把检测重复字符的逻辑抽成了单独的方法,代码更易读、易维护
- 优化了变量命名,让逻辑更清晰
这样修改后,输入google paper water,输出就是paper water,完全没有末尾多余空格啦~
内容的提问来源于stack exchange,提问作者Ninja
相关产品推荐
相关产品推荐

