如何通过递归实现移除字符串指定字符并将其移至末尾
递归实现指定字符移至字符串末尾
我来帮你调整这段递归代码,实现把指定字符移到字符串末尾的功能——你的需求是保留非目标字符的原有顺序,同时把所有目标字符集中放到字符串最后,比如removeChar("hello world, let's go!",'l')要返回"heo word, et's go!llll"对吧?
你的原代码是直接删除目标字符,我们只需要修改递归逻辑,不是删掉目标字符,而是把它“挪”到递归处理后的结果末尾就行。
修改后的递归代码
public static String removeChar(String word, char charToRemove) { // 遍历字符串寻找第一个目标字符 for (int i = 0; i < word.length(); i++) { if (word.charAt(i) == charToRemove) { // 剥离当前目标字符,得到剩余待处理的子字符串 String remainingStr = word.substring(0, i) + word.substring(i + 1); // 递归处理剩余字符串,再把当前目标字符追加到结果末尾 return removeChar(remainingStr, charToRemove) + charToRemove; } } // 递归终止条件:字符串中已无目标字符,直接返回原串 return word; }
逻辑拆解
- 终止条件:当遍历完整个字符串都没找到目标字符时,说明所有目标字符已经被移到末尾了,直接返回当前字符串即可。
- 递归过程:每找到一个目标字符,先把它从当前字符串中剥离出来,递归处理剩下的子字符串;等子字符串处理完成后,再把这个目标字符追加到结果的最后。每一层递归都会完成一个目标字符的“搬运”,最终所有目标字符都会集中在字符串末尾。
测试验证
比如调用removeChar("you should not go",'o'):
- 第一次找到索引1的'o',处理剩余字符串
"yu should not go",递归后返回处理结果,再加上'o' - 递归过程会重复这个操作,直到所有'o'都被移到末尾,最终得到
"yu shuld nt goooo",完全符合你的需求。
内容的提问来源于stack exchange,提问作者simon francis
相关产品推荐
相关产品推荐

