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

如何恢复使用.trim()去除的字符串原始首尾空格?

如何恢复trim()后的原始带首尾空格字符串?

嘿,这个问题的核心其实很直白:当你调用trim()方法时,字符串首尾的空白字符(包括空格、制表符这些)已经被永久丢弃了——Java的trim()不会帮你记录这些被删掉的内容,所以单靠trim后的字符串本身,是没办法直接还原回原始状态的。

不过我们可以通过提前做一些处理来实现“恢复”的需求,下面给你两个可行的方案:

方案1:提前保存原始字符串

这是最简单直接的办法——别把trim后的结果覆盖原始变量,而是用新变量存处理后的版本,原始字符串留着备用:

// 保存原始字符串
String original = " apple ";
// 用新变量存trim后的结果
String trimmed = original.trim();

// 验证trim结果
assert trimmed.equals("apple");

// 需要恢复的时候直接用原始字符串就行
assert original.equals(" apple ");

这个方案的优势是零额外逻辑,只要你不覆盖原始变量,随时都能拿到带空格的版本。

方案2:记录首尾空白字符数量再拼接

如果必须要先trim,之后再恢复,那你需要在trim之前先记录首尾空白的数量,后续再把这些空白拼接回去。比如可以写个简单的工具类来封装这个逻辑:

public class TrimRestoreHelper {
    private final String trimmedString;
    private final int leadingWhitespaceCount;
    private final int trailingWhitespaceCount;

    public TrimRestoreHelper(String original) {
        // 计算开头的空白字符数量
        int leading = 0;
        while (leading < original.length() && Character.isWhitespace(original.charAt(leading))) {
            leading++;
        }
        // 计算结尾的空白字符数量
        int trailing = 0;
        int contentEndIndex = original.length() - 1;
        while (trailing < original.length() - leading && Character.isWhitespace(original.charAt(contentEndIndex - trailing))) {
            trailing++;
        }

        this.trimmedString = original.substring(leading, original.length() - trailing);
        this.leadingWhitespaceCount = leading;
        this.trailingWhitespaceCount = trailing;
    }

    // 获取trim后的字符串
    public String getTrimmed() {
        return trimmedString;
    }

    // 恢复原始格式的字符串
    public String restore() {
        StringBuilder result = new StringBuilder();
        // 添加上开头的空白
        result.append(" ".repeat(leadingWhitespaceCount));
        result.append(trimmedString);
        // 添加结尾的空白
        result.append(" ".repeat(trailingWhitespaceCount));
        return result.toString();
    }
}

使用示例:

String original = " apple ";
TrimRestoreHelper helper = new TrimRestoreHelper(original);
String trimmed = helper.getTrimmed();
assert trimmed.equals("apple");

// 恢复原始字符串
String restored = helper.restore();
assert restored.equals(" apple ");

如果只需要处理普通空格(不需要处理制表符、换行符这类空白),可以把Character.isWhitespace换成original.charAt(...) == ' '来精确匹配。

⚠️ 重要提醒:如果已经执行了a = a.trim()把原始字符串覆盖了,而且之前没有任何地方保存过原始内容,那完全无法恢复——因为trim后的字符串没有任何关于原始首尾空格的信息,就像你剪掉了纸张的边缘,没法从剩下的部分还原剪掉的部分一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:41:38