Java移除空字符串报错:unexpected empty sentence: [] 求解
解决方案:实例化Sentence前过滤空内容
不用纠结修改正则,直接在文本清理完成后、传入Sentence构造器之前加一层空值判断,就能彻底避免这个异常。
具体实现步骤
- 保留你原有的文本清理逻辑(移除数字、标点、尾随空格)
- 对清理后的字符串做有效性校验:先
trim()确保过滤全空格情况,再判断长度是否大于0 - 仅当字符串有效时才实例化Sentence,无效则直接跳过或给lemmas字段设兜底值
代码示例
public void LemmatiseSingleDocument(String originalText) { // 原有清理逻辑:移除数字、标点、尾随空格 String cleanedText = originalText.replaceAll("[\\d\\p{Punct}]", "").trim(); // 新增空内容过滤逻辑 if (cleanedText.isEmpty()) { // 可根据需求选择跳过处理,或给lemmas设空值/默认标识 System.out.println("跳过空内容,避免Sentence实例化报错"); return; } // 仅处理有效内容 Sentence sentence = new Sentence(cleanedText); // 后续将处理后的lemmas存入JSON等操作 // ... }
额外优化(Java 11+)
如果原文本清理后可能出现全空白字符(比如" !!! "),可以用isBlank()替代isEmpty(),覆盖更多空白场景:
if (cleanedText.isBlank()) { return; }
为什么不硬改正则?
纯数字、纯标点的组合场景太多(比如"1.8"、"???---"),正则很难一次性覆盖所有情况,反而会让逻辑变得复杂晦涩。在清理后加判断是更直接、易维护的方案,逻辑清晰且不会引入新的正则问题。
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

