我们可以先自己模拟一下分隔字符串的过程。如果只是简单的,遇到分隔符,将分隔符前后的子串加入结果的List,那么很显然并没有考虑到一个String中有多个字符串的情况。一种比较容易想到的方法是:
- 先对List中每个字符串遍历;
- 对于每个字符串内部,维护一个缓冲区;
- 遍历一个字符串时,若遇到分隔符,且缓冲区不为空,则将缓冲区内容加入result,并清空缓冲区;若未遇到分隔符,则将当前字符加入缓冲区;
- 遍历完该字符串后,还要检查一边缓冲区,若不为空,将剩余字符串也加入result;
- 对每个字符串重复2-4步的操作即可。
实现代码如下:
class Solution {public List<String> splitWordsBySeparator(List<String> words, char separator) {List<String> res = new ArrayList<>();for(String str:words) {//相当于为每个单词维护一个临时缓冲区StringBuilder sb = new StringBuilder();for(int i=0;i<str.length();i++) {//若遇到分隔符,且缓冲区不为空//将缓冲区内容加入res,清空缓冲区if(str.charAt(i)==separator) {if(sb.length()>0) {res.add(sb.toString());sb.setLength(0);}}//若未遇到分隔符,则当前字符加入缓冲区sbelse {sb.append(str.charAt(i));//这个append方法是用StringBuilder的关键}}//遍历完成后,若缓冲区还有剩余字符,全部加入resif(sb.length()>0) {res.add(sb.toString());}}return res;}
}