Java自己实现split()方法---按照给定的目标字符串分割原始字符串

方法一:

先利用字符串的contains()方法判断原始字符串是否包含目标字符串,然后根据下标分割,将前面一段字符串加入list列表,然后删除给定目标字符串,继续while循环;最后再将剩余的最后一段字符串加入列表。

public static String[] split(String array, String target) {
        List<String> list = new ArrayList<>();
        while (array.contains(target)) {
            int index = array.indexOf(target);
            String temp = array.substring(0, index);
            list.add(temp);
            array = array.substring(index + target.length()); //substring(endIndex)删除endIndex之前的字符串
        }
        list.add(array);
        String[] arr = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            arr[i] = list.get(i);
        }
        return arr;
    }

方法二:

将两个字符串转化为字符数组,利用StringBuffer或者StringBuilder类,对原始字符串字符数组遍历,每遍历一次就判断一下是否与目标字符串字符数组的每一位相等,若不相等,将遍历到的字符append到buffer中,若每一位都相等,则将buffer中的数据存入list,再将buffer清空,最后跳过目标字符串字符数组的相应字符,继续对原始数组循环操作。

 public static List<String> split1(String array, String target){
        List<String> result = new ArrayList<>();
        char[] arrayChar = array.toCharArray();
        char[] targetChar = target.toCharArray();
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < arrayChar.length;){
            if(!isContains(arrayChar,targetChar,i)){
                sb.append(arrayChar[i]);
                i++;
            }else {
                result.add(sb.toString());
                sb = new StringBuffer();
                i += targetChar.length;
            }
        }
        if(sb.length() != 0){
            result.add(sb.toString());
        }
        return result;
    }

    public static boolean isContains(char[] srcArray, char[] targetArray, int tmp){
        for(int i = 0; i<targetArray.length; i++){
            if(tmp + i >= srcArray.length)
                return false;
            if(srcArray[i + tmp] != targetArray[i])
                return false;
        }
        return true;
    }

完整代码如下:

import java.util.ArrayList;
import java.util.List;

/**
 * Created by wsw on 2019/9/25 21:00
 * 实现split分隔方法
 */
public class SplitString {
    public static String[] split(String array, String target) {
        List<String> list = new ArrayList<>();
        while (array.contains(target)) {
            int index = array.indexOf(target);
            String temp = array.substring(0, index);
            list.add(temp);
            array = array.substring(index + target.length()); //substring(endIndex)删除endIndex之前的字符串
        }
        list.add(array);
        String[] arr = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            arr[i] = list.get(i);
        }
        return arr;
    }

    public static List<String> split1(String array, String target){
        List<String> result = new ArrayList<>();
        char[] arrayChar = array.toCharArray();
        char[] targetChar = target.toCharArray();
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < arrayChar.length;){
            if(!isContains(arrayChar,targetChar,i)){
                sb.append(arrayChar[i]);
                i++;
            }else {
                result.add(sb.toString());
                sb = new StringBuffer();
                i += targetChar.length;
            }
        }
        if(sb.length() != 0){
            result.add(sb.toString());
        }
        return result;
    }

    public static boolean isContains(char[] srcArray, char[] targetArray, int tmp){
        for(int i = 0; i<targetArray.length; i++){
            if(tmp + i >= srcArray.length)
                return false;
            if(srcArray[i + tmp] != targetArray[i])
                return false;
        }
        return true;
    }

    public static void main(String[] args) {
        String array = "312456781124789";
        String target = "12";
        //String[] resList = split(array, target);
        List<String> resList = split1(array, target);
        for (String s : resList) {
            System.out.print(s + " ");
        }
    }
}

测试结果:

3 456781 4789 
Process finished with exit code 0

你可能感兴趣的:(java,数据结构)