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

Java中按字符限制截断字符串时移除未完成单词的问题及代码优化需求

解决字符串截断时移除末尾不完整单词的问题

我帮你梳理下原代码里的问题,然后给出修正后的实现,完美满足你的需求:

原代码存在的核心问题

  • 类名不匹配:Main类里实例化了Solution,但实际定义的类是Trim,直接导致编译错误
  • 字符串比较错误:Java中用==比较字符串是判断引用是否相同,不是内容相等,应该用equals()或更针对性的方法(比如isEmpty()判断空字符串)
  • 截断逻辑漏洞:原代码里的条件判断(比如message.substring(K+1)==" ")不仅容易抛出索引越界异常,还无法正确识别并移除末尾的不完整单词
  • 输入验证逻辑错误:比如message.substring(0)==" "是错误写法,应该直接判断第一个字符是否为空格

修正后的完整代码

class Trim {
    public String trim(String message, int K) {
        // 输入验证:修复逻辑,替换错误的字符串比较方式
        if (message == null || message.isEmpty() || message.length() > 500 || K < 1 || K > 500 
            || message.charAt(0) == ' ' || message.charAt(message.length() - 1) == ' ') {
            System.err.println("Message must be non-empty, length between 1-500; K must be between 1-500; message cannot start or end with space");
            return ""; // 用返回空代替System.exit(0),避免直接终止程序更合理
        }

        int messageLength = message.length();
        // 如果K大于等于字符串长度,直接返回原字符串
        if (K >= messageLength) {
            return message;
        }

        // 先截断到K位置
        String cropped = message.substring(0, K);

        // 检查截断后的最后一个字符是否是空格,如果是直接去掉末尾空格返回
        if (cropped.charAt(cropped.length() - 1) == ' ') {
            return cropped.trim();
        }

        // 从截断内容里找最后一个空格的位置,移除不完整的单词
        int lastSpaceIndex = cropped.lastIndexOf(' ');
        if (lastSpaceIndex != -1) {
            cropped = cropped.substring(0, lastSpaceIndex);
        } else {
            // 如果截断后没有空格(比如K比第一个单词还短),返回空字符串(符合移除不完整单词的需求)
            cropped = "";
        }

        // 确保返回结果没有末尾空格
        return cropped.trim();
    }
}

class Main {
    public static void main(String[] args) {
        Trim s = new Trim(); // 修正类名匹配问题
        String message = "The code is not trimming entire character";
        System.out.println(s.trim(message, 18)); // 输出:The code is not
        String message1 = "no problem";
        System.out.println(s.trim(message1, 100)); // 输出:no problem
        String message2 = "The quick brown fox jumps over the lazy dog";
        System.out.println(s.trim(message2, 39)); // 输出:The quick brown fox jumps over the lazy
    }
}

代码说明

  1. 输入验证优化:替换了错误的字符串比较逻辑,用isEmpty()判断空字符串,直接通过charAt()检查首尾空格,同时明确了K的合法范围(必须≥1)
  2. 截断逻辑修复:
    • 先按指定长度K截断字符串
    • 如果截断后的最后一个字符是空格,直接去掉末尾空格返回
    • 否则,用lastIndexOf(' ')定位截断内容里最后一个空格的位置,截断到该位置以移除不完整单词
    • 处理极端情况:如果截断内容里没有空格(比如K比第一个单词还短),返回空字符串,完全符合“移除不完整单词”的需求
  3. 类名修正:Main类里实例化正确的Trim类,解决了原代码的编译错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:19:04