package com.vaguehope.onosendai.util; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class StringHelper { public static final Pattern URL_PATTERN = Pattern.compile("\\(?\\b(https?://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]"); public static final Pattern MENTIONS_PATTERN = Pattern.compile("\\B@([a-zA-Z0-9_]{1,15})"); private static final String ELIPSE = "..."; private StringHelper () { throw new AssertionError(); } public static boolean isEmpty (final String s) { return s == null || s.isEmpty(); } public static boolean notEmpty (final String s) { return s != null && !s.isEmpty(); } public static String maxLength(final String s, final int len) { if (s.length() < len) return s; return s.substring(0, len - ELIPSE.length()) + ELIPSE; } public static String maxLengthEnd(final String s, final int len) { if (s.length() <= len) return s; return ELIPSE + s.substring(s.length() - (len - ELIPSE.length())); } public static boolean safeContainsIgnoreCase (final String s, final String lookFor) { if (s == null) return lookFor == null; if (lookFor == null) return false; return s.toLowerCase(Locale.UK).contains(lookFor.toLowerCase(Locale.UK)); } public static String firstLine(final String s) { if (s == null) return s; final int x = s.indexOf('\n'); return x >= 0 ? s.substring(0, x) : s; } public static String replaceOnce (final String str, final String from, final String to) { if (isEmpty(str) || isEmpty(from) || to == null) return str; final int x = str.indexOf(from); if (x < 0) return str; return new StringBuilder(str.length() + to.length() - from.length()) .append(str.substring(0, x)) .append(to) .append(str.substring(x + from.length())) .toString(); } public static String addSuffexIfCaseInsensitiveMissing (final String str, final String suffex) { if (str == null) return null; if (suffex == null) throw new IllegalArgumentException("Suffex must not be null."); if (str.toLowerCase(Locale.ENGLISH).endsWith(suffex.toLowerCase(Locale.ENGLISH))) return str; return str + suffex; } public static List<String> extractPattern (final Pattern pattern, final String input) { if (input == null || input.isEmpty()) return Collections.emptyList(); List<String> occurances = null; final Matcher m = pattern.matcher(input); while (m.find()) { final String g = m.group(1); if (occurances == null) occurances = new ArrayList<String>(); occurances.add(g); } return occurances != null ? occurances : Collections.<String>emptyList(); } }