Skip to content

Conversation

ET-yzk
Copy link

@ET-yzk ET-yzk commented Oct 4, 2025

Fixes #4091

问题描述

当使用 WordTree.addWord("hh(") 添加一个以停顿词(如 '(')结尾的关键词时,该关键词的合法前缀(如 "hh")无法被 matchAll 正确匹配,返回空列表。

根本原因

addWord 方法在循环结束后,使用原始字符串的最后一个字符(currentChar)调用 parent.setEnd(currentChar)。如果该字符被 charFilter 过滤,则 setEnd 会设置一个无效的结束标记(因为该字符并未真正插入到 WordTree 中)。

修复方案

引入 lastAcceptedChar 变量,仅在字符被 charFilter 接受时更新它,并在最后使用该变量调用 setEnd,确保结束标记始终基于合法字符。

验证

新增两个单元测试:

  • addWordWithTrailingFilteredCharTest:验证结尾带过滤字符的情况。
  • addWordWithMiddleFilteredCharTest:验证中间带过滤字符的情况。

已通过相关测试。

ET-yzk added 2 commits October 4, 2025 22:57
- 修复:引入 lastAcceptedChar 变量,确保 setEnd 使用最后一个合法字符
- 新增单元测试验证修复效果

Fixes chinabugotech#4091
修正代码,使得与注释内容对应
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant