diff src/goodjava/util/GoodUtils.java @ 1720:2f4c99c02436

add GoodUtils.split
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 25 Jul 2022 17:31:50 -0600
parents 1cc6c7fa803d
children 1725fdb6c4f5
line wrap: on
line diff
--- a/src/goodjava/util/GoodUtils.java	Mon Jul 25 14:31:48 2022 -0600
+++ b/src/goodjava/util/GoodUtils.java	Mon Jul 25 17:31:50 2022 -0600
@@ -2,6 +2,7 @@
 
 import java.io.UnsupportedEncodingException;
 import java.util.Base64;
+import java.util.ArrayList;
 
 
 public final class GoodUtils {
@@ -17,4 +18,55 @@
 	public static String base64Encode(String s) {
 		return Base64.getEncoder().encodeToString(getBytes(s,"UTF-8"));
 	}
+
+	public static String[] split(String s,String splitter) {
+		return split(s,splitter,-1);
+	}
+
+	// modified from String.java
+	public static String[] split(String s,String splitter,int limit) {
+		int len = s.length();
+		int n = splitter.length();
+		int off = 0;
+		int next = 0;
+		boolean limited = limit > 0;
+		ArrayList<String> list = new ArrayList<>();
+		if( n==0 ) {
+			limit = limited ? Math.min(limit,len) : len;
+			for( int i=0; i<limit; i++ ) {
+				list.add(s.substring(i, i+1));
+			}
+			String[] result = new String[limit];
+			return list.toArray(result);
+		}
+		while ((next = s.indexOf(splitter, off)) != -1) {
+			if (!limited || list.size() < limit - 1) {
+				list.add(s.substring(off, next));
+				off = next + n;
+			} else {    // last one
+				//assert (list.size() == limit - 1);
+				list.add(s.substring(off, len));
+				off = len;
+				break;
+			}
+		}
+		// If no match was found, return s
+		if (off == 0)
+			return new String[]{s};
+
+		// Add remaining segment
+		if (!limited || list.size() < limit)
+			list.add(s.substring(off, len));
+
+		// Construct result
+		int resultSize = list.size();
+		if (limit == 0) {
+			while (resultSize > 0 && list.get(resultSize - 1).length() == 0) {
+				resultSize--;
+			}
+		}
+		String[] result = new String[resultSize];
+		return list.subList(0, resultSize).toArray(result);
+	}
+
 }