前几天朋友丢给我这么一道编码题,问我有没有什么想法,我当时第一想法是这道题是不是leetcode那种,这货不会是要在我这装逼炫耀吧,那就尴尬了,作为一个还没深入接触过leetcode的程序员(ps:实在惭愧),怎么可能短时间内把既准确又高效的代码甩给他,并当面给他重重一击呢。哈哈哈,开个玩笑,言归正传。
说起这种分割字符串的问题,我最先想到了学生时代接触到的游标概念,所谓游标,其实就是一个从某一端向另一端依次遍历的指针,所以我在想,用游标是不是可以作为这道题的一种解决策略呢。
基于以上想法,快速梳理一下,要达到目的必须注意以下几个关键点:
将第二个字符串作为游标,从第一个字符串的下标0开始依次向后比对;
进行比对的左右两项都有可能是多字符的,既然无法使用subString()方法,那么就要避免左右两项作为字符串整体对比的逻辑,所以我能想到的是使用字符型数组;
匹配上的部分如何同不匹配的部分区分开,哦,可以使用包装类,那就可以用null值作为特殊值达到区分的效果;
游标遍历结束后,一个null值或者连续的null值会被作为一个分割界限的整体,后续逻辑要以此为判断组装结果集以及完成流程控制;
话不多说直接上代码(以下代码可能有的bug点:特殊字符、null指针等,目前均尚不考虑)。
public class SplitDemo {
public List split(String str, String reg) {
List result = new ArrayList<>();
Character[] strArr = toCharacterArray(str);
Character[] regArr = toCharacterArray(reg);
//游标逻辑
for (int i = 0; i < strArr.length; i++) {
//标识多字符是否完全匹配
boolean flag = false;
for (int j = 0; j < regArr.length; j++) {
flag = regArr[j].equals(strArr[i + j]);
if (!flag) {
break;
}
}
if (!flag) {
continue;
}
//特殊null值赋值
for (int j = 0; j < regArr.length; j++) {
strArr[i + j] = null;
}
}
//结果集封装
String item = "";<

本文介绍了一种不使用`subString()`和原生`split()`方法来实现`String`中`split()`功能的编码思路。通过游标概念,将第二个字符串作为游标在第一个字符串中遍历,匹配成功后用`null`值区分,最后组装结果集。还分享了朋友更简洁高效的解决方案,利用`indexOf()`方法寻找匹配位置。
最低0.47元/天 解锁文章
1840

被折叠的 条评论
为什么被折叠?



