如何从存储字符串字符的ArrayList中移除所有非字母字符?
移除ArrayList中的非字母字符
嘿,我来帮你搞定这个问题!你已经成功把用户输入的字符串转成了ArrayList<Character>,现在要过滤掉所有非字母的字符(比如.、=这类),只保留纯字母部分对吧?这里有两种实用的方法:
方法1:倒序遍历并移除元素
如果正序遍历ArrayList并删除元素,会导致后续元素的索引偏移,容易漏删或者抛出索引越界异常。倒序遍历就不会有这个问题:
// 倒序遍历ArrayList,避免索引偏移问题 for (int i = stringArrayList.size() - 1; i >= 0; i--) { char c = stringArrayList.get(i); // 判断当前字符是否不是字母 if (!Character.isLetter(c)) { stringArrayList.remove(i); } }
处理完成后,你的stringArrayList里就只剩下B、u、b、b、l、e、s、o、r、t这些字母字符,正好对应单词"Bubblesort"。
方法2:使用Stream API(Java 8+)
如果你的项目用的是Java 8及以上版本,用Stream过滤会更简洁优雅,还能避免手动处理索引的麻烦:
方式A:生成新的过滤列表
import java.util.stream.Collectors; // 过滤出字母字符,生成新的ArrayList ArrayList<Character> filteredList = stringArrayList.stream() .filter(Character::isLetter) .collect(Collectors.toCollection(ArrayList::new));
方式B:直接修改原列表
如果不想创建新列表,用removeIf方法可以直接在原列表上操作,内部已经处理了遍历逻辑:
// 直接移除原列表中的非字母元素 stringArrayList.removeIf(c -> !Character.isLetter(c));
效果验证
针对你的输入示例Bubblesort.=,不管用上面哪种方法,最终的ArrayList都会只包含组成"Bubblesort"的所有字母字符,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

