package com.arthurbergmz.assistant.utils;
import java.text.Normalizer;
import java.util.regex.Pattern;
public class StringUtils {
public static final String ALPHANUMERIC_SEQUENCE = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
public static final Pattern NORMAL_PATTERN = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
public static final String[] EMPTY_ARRAY = new String[]{};
private static String normalizeString(String str){
return NORMAL_PATTERN.matcher(Normalizer.normalize(str.toLowerCase(), Normalizer.Form.NFD)).replaceAll("").replaceAll("[^A-Za-z0-9]", "");
}
// Levenshtein distance algorithm
public static double checkSimilarity(String str1, String str2){
str1 = normalizeString(str1);
str2 = normalizeString(str2);
double[] costs = new double[str2.length()+1];
for(int j = 0; j < costs.length; j++) costs[j] = (double) j;
for(int i = 1; i <= str1.length(); i++){
costs[0] = (double) i;
double k = (double) i - 1;
for(int l = 1; l <= str2.length(); l++){
double m = Math.min(1 + Math.min(costs[l], costs[l-1]), ((str1.charAt(i-1) == str2.charAt(l-1)) ? k : (k + 1)));
k = costs[l];
costs[l] = m;
}
}
return costs[str2.length()];
}
public static boolean isEmpty(String str){
return ((str == null) || (str.length() == 0));
}
public static String generateUID(int length){
StringBuilder builder = new StringBuilder();
for(int i = 0, j = (ALPHANUMERIC_SEQUENCE.length() - 1); i < length; i++) builder.append(ALPHANUMERIC_SEQUENCE.charAt(MathUtils.RANDOM.nextInt(j)));
return builder.toString();
}
public static String getRandomString(String[] stringArray){
int length = stringArray.length;
if(stringArray.length < 1) return "";
if(stringArray.length == 1) return stringArray[0];
return stringArray[MathUtils.RANDOM.nextInt(length - 1)];
}
}