Java中查找指定长度单词且忽略标点符号的实现方法
实现长单词过滤(忽略标点)的方案
问题根因
你当前的逻辑直接统计带标点的原始单词长度,导致Stones!这类末尾带标点的单词长度被误算为7,匹配阈值后被错误返回。
实现步骤
- 先编写单词清洗逻辑,借助
Character.isLetter()方法(你提供的参考代码中已演示该API用法)遍历单词每个字符,仅保留字母内容,得到无标点的纯字母单词 - 再判断清洗后的纯字母单词长度是否大于等于指定阈值,符合要求的才加入返回结果
完整示例代码
import java.util.ArrayList; import java.util.List; public class WordFilter { // 清洗单词,仅保留字母字符 private static String cleanWord(String rawWord) { StringBuilder sb = new StringBuilder(); for (char c : rawWord.toCharArray()) { if (Character.isLetter(c)) { sb.append(c); } } return sb.toString(); } // 查找长度大于等于minLength的单词,自动忽略标点 public static List<String> bigLongWords(String inputStr, int minLength) { List<String> result = new ArrayList<>(); // 按空格分割得到原始单词数组 String[] rawWords = inputStr.split(" "); for (String rawWord : rawWords) { String cleanWord = cleanWord(rawWord); // 跳过清洗后为空的无效内容 if (cleanWord.isEmpty()) { continue; } if (cleanWord.length() >= minLength) { result.add(cleanWord); } } return result; } public static void main(String[] args) { // 测试用例 String testInput = "The Rolling Stones!"; List<String> result = bigLongWords(testInput, 7); // 输出结果:[Rolling],符合预期 System.out.println(result); } }
效果说明
示例中Stones!清洗后得到纯字母内容Stones,长度为6,小于设定的阈值7,不会被纳入返回结果,完全符合预期要求。
内容的提问来源于stack exchange,提问作者Scuba Sam
相关产品推荐
相关产品推荐

