Tuesday, 16 April 2019

Split string without using java provided split method

package sam.string;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

public class SplitString {
 public static List<String> split(String s, String delimeter) {
  Objects.requireNonNull(s);
  Objects.requireNonNull(delimeter);
  
  if(s.isEmpty() || delimeter.isEmpty())
   return Collections.singletonList(s);
  
  List<String> list = new ArrayList<>();
  int start = 0, end = 0;
  
  while(true) {
   end = s.indexOf(delimeter, start);
   
   if(end < 0) {
    list.add(s.substring(start));
    break;
   } else {
    list.add(s.substring(start, end));
    start = end + delimeter.length();
   }
  }
  
  return list;
 }

}

test

    @Test
    void test() {
        check("1 2 3", " ");
        check("1122123", "12");
        check("1abc2llc3kollma0allmi", "ll");
        check("ll1abc2llc3kollma0allmi", "ll");
    }

    private void check(String s, String deli) {
        List<String> actual = SplitString.split(s, deli);
        List<String> expected = Pattern.compile(deli, Pattern.LITERAL).splitAsStream(s).collect(Collectors.toList());

        System.out.printf("split(\"%s\", \"%s\") = %s\n", s, deli, actual);
        
        assertEquals(expected, actual);
    }


split("1 2 3", " ") = [1, 2, 3]
split("1122123", "12") = [1, 2, 3]
split("1abc2llc3kollma0allmi", "ll") = [1abc2, c3ko, ma0a, mi]
split("ll1abc2llc3kollma0allmi", "ll") = [, 1abc2, c3ko, ma0a, mi]


code highlighted using: hilite.me

No comments:

Post a Comment