| 
1583
 | 
     1 package goodjava.util;
 | 
| 
 | 
     2 
 | 
| 
 | 
     3 import java.io.UnsupportedEncodingException;
 | 
| 
 | 
     4 import java.util.Base64;
 | 
| 
1720
 | 
     5 import java.util.ArrayList;
 | 
| 
1583
 | 
     6 
 | 
| 
 | 
     7 
 | 
| 
 | 
     8 public final class GoodUtils {
 | 
| 
 | 
     9 
 | 
| 
 | 
    10 	public static byte[] getBytes(String s,String charsetName) {
 | 
| 
 | 
    11 		try {
 | 
| 
 | 
    12 			return s.getBytes(charsetName);
 | 
| 
 | 
    13 		} catch(UnsupportedEncodingException e) {
 | 
| 
 | 
    14 			throw new RuntimeException(e);
 | 
| 
 | 
    15 		}
 | 
| 
 | 
    16 	}
 | 
| 
 | 
    17 
 | 
| 
 | 
    18 	public static String base64Encode(String s) {
 | 
| 
 | 
    19 		return Base64.getEncoder().encodeToString(getBytes(s,"UTF-8"));
 | 
| 
 | 
    20 	}
 | 
| 
1720
 | 
    21 
 | 
| 
 | 
    22 	public static String[] split(String s,String splitter) {
 | 
| 
 | 
    23 		return split(s,splitter,-1);
 | 
| 
 | 
    24 	}
 | 
| 
 | 
    25 
 | 
| 
 | 
    26 	// modified from String.java
 | 
| 
 | 
    27 	public static String[] split(String s,String splitter,int limit) {
 | 
| 
 | 
    28 		int len = s.length();
 | 
| 
 | 
    29 		int n = splitter.length();
 | 
| 
 | 
    30 		int off = 0;
 | 
| 
 | 
    31 		int next = 0;
 | 
| 
 | 
    32 		boolean limited = limit > 0;
 | 
| 
 | 
    33 		ArrayList<String> list = new ArrayList<>();
 | 
| 
 | 
    34 		if( n==0 ) {
 | 
| 
 | 
    35 			limit = limited ? Math.min(limit,len) : len;
 | 
| 
 | 
    36 			for( int i=0; i<limit; i++ ) {
 | 
| 
 | 
    37 				list.add(s.substring(i, i+1));
 | 
| 
 | 
    38 			}
 | 
| 
 | 
    39 			String[] result = new String[limit];
 | 
| 
 | 
    40 			return list.toArray(result);
 | 
| 
 | 
    41 		}
 | 
| 
 | 
    42 		while ((next = s.indexOf(splitter, off)) != -1) {
 | 
| 
 | 
    43 			if (!limited || list.size() < limit - 1) {
 | 
| 
 | 
    44 				list.add(s.substring(off, next));
 | 
| 
 | 
    45 				off = next + n;
 | 
| 
 | 
    46 			} else {    // last one
 | 
| 
 | 
    47 				//assert (list.size() == limit - 1);
 | 
| 
 | 
    48 				list.add(s.substring(off, len));
 | 
| 
 | 
    49 				off = len;
 | 
| 
 | 
    50 				break;
 | 
| 
 | 
    51 			}
 | 
| 
 | 
    52 		}
 | 
| 
 | 
    53 		// If no match was found, return s
 | 
| 
 | 
    54 		if (off == 0)
 | 
| 
 | 
    55 			return new String[]{s};
 | 
| 
 | 
    56 
 | 
| 
 | 
    57 		// Add remaining segment
 | 
| 
 | 
    58 		if (!limited || list.size() < limit)
 | 
| 
 | 
    59 			list.add(s.substring(off, len));
 | 
| 
 | 
    60 
 | 
| 
 | 
    61 		// Construct result
 | 
| 
 | 
    62 		int resultSize = list.size();
 | 
| 
 | 
    63 		if (limit == 0) {
 | 
| 
 | 
    64 			while (resultSize > 0 && list.get(resultSize - 1).length() == 0) {
 | 
| 
 | 
    65 				resultSize--;
 | 
| 
 | 
    66 			}
 | 
| 
 | 
    67 		}
 | 
| 
 | 
    68 		String[] result = new String[resultSize];
 | 
| 
 | 
    69 		return list.subList(0, resultSize).toArray(result);
 | 
| 
 | 
    70 	}
 | 
| 
 | 
    71 
 | 
| 
1778
 | 
    72 	// faster than String.replace()
 | 
| 
 | 
    73 	public static String replace(String s,String target,String replacement) {
 | 
| 
 | 
    74 		int i = s.indexOf(target);
 | 
| 
 | 
    75 		if( i == -1 )
 | 
| 
 | 
    76 			return s;
 | 
| 
 | 
    77 		int starting = 0;
 | 
| 
 | 
    78 		int n = target.length();
 | 
| 
 | 
    79 		StringBuilder sb = new StringBuilder();
 | 
| 
 | 
    80 		do {
 | 
| 
 | 
    81 			sb.append(s,starting,i);
 | 
| 
 | 
    82 			sb.append(replacement);
 | 
| 
 | 
    83 			starting = i + n;
 | 
| 
 | 
    84 			i = s.indexOf(target,starting);
 | 
| 
 | 
    85 		} while( i != -1 );
 | 
| 
 | 
    86 		sb.append(s,starting,s.length());
 | 
| 
 | 
    87 		return sb.toString();
 | 
| 
 | 
    88 	}
 | 
| 
 | 
    89 
 | 
| 
1870
 | 
    90 	public static boolean equal(Object o1,Object o2) {
 | 
| 
 | 
    91 		return o1==null ? o2==null : o1.equals(o2);
 | 
| 
 | 
    92 	}
 | 
| 
 | 
    93 
 | 
| 
1583
 | 
    94 }
 |