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

如何消除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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:44