package com.brucezee.jspider.common.utils; import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 字符串相关工具类 * Created by brucezee on 2017/1/7. */ public class SpiderStrUtils { public static final String NUMBERS_REGEX = "-?[\\d]+(,\\d{3})*\\.?[\\d]*"; /** * 获取字符串中介于prefix和suffix之间的字符串 * @param content 原字符串 * @param prefix 前缀 * @param suffix 后缀 * @return 没有找到返回null。 */ public static String getMiddleText(String content, String prefix, String suffix) { return getMiddleText(content, prefix, suffix, true, true); } /** * 获取字符串中介于prefix和suffix之间的字符串 * @param content 原字符串 * @param prefix 前缀 * @param suffix 后缀 * @param lazyPrefix 是否使用第一次找到的前缀作为截取前缀 * @param lazySuffix 是否使用第一次找到的后缀作为截取后缀 * @return 没有找到返回null。 */ public static String getMiddleText(String content, String prefix, String suffix, boolean lazyPrefix, boolean lazySuffix) { if (content != null) { if (prefix != null && suffix != null) { //截取前缀到后缀的字符串 int prefixIndex = lazyPrefix ? content.indexOf(prefix) : content.lastIndexOf(prefix); if (prefixIndex >= 0) { String tail = content.substring(prefixIndex + prefix.length()); int suffixIndex = lazySuffix ? tail.indexOf(suffix) : tail.lastIndexOf(suffix); if (suffixIndex > 0) { return tail.substring(0, suffixIndex); } } } else if (prefix == null && suffix != null) { //截取后缀到末尾的字符串 int suffixIndex = lazySuffix ? content.indexOf(suffix) : content.lastIndexOf(suffix); if (suffixIndex > 0) { return content.substring(0, suffixIndex); } } else if (prefix != null && suffix == null) { //截取开头到前缀的字符串 int prefixIndex = lazyPrefix ? content.indexOf(prefix) : content.lastIndexOf(prefix); if (prefixIndex >= 0) { return content.substring(prefixIndex + prefix.length(), content.length()); } } } return null; } /** * 从文本中根据一连串的前缀和后缀截取字符串 * @param content 原字符串 * @param prefixSuffixes 前缀后缀的组合 * @return 没有找到返回null */ public static String getMiddleText(String content, PrefixSuffix...prefixSuffixes) { if (prefixSuffixes == null || prefixSuffixes.length == 0) { return content; } if (prefixSuffixes.length > 1) { for (int i = 0; i < prefixSuffixes.length - 1; i++) { PrefixSuffix prefixSuffix = prefixSuffixes[i]; content = getWholeText(content, prefixSuffix.prefix, prefixSuffix.suffix, prefixSuffix.lazyPrefix, prefixSuffix.lazySuffix); } } PrefixSuffix prefixSuffix = prefixSuffixes[prefixSuffixes.length-1]; String text = getMiddleText(content, prefixSuffix.prefix, prefixSuffix.suffix, prefixSuffix.lazyPrefix, prefixSuffix.lazySuffix); return StringUtils.trim(text); } /** * 获取字符串中介于prefix和suffix之间的字符串 然后拼接上prefix和suffix返回 * @param content 原字符串 * @param prefix 前缀 * @param suffix 后缀 * @param lazyPrefix 是否使用第一次找到的前缀作为截取前缀 * @param lazySuffix 是否使用第一次找到的后缀作为截取后缀 * @return 没有找到返回null。 */ public static String getWholeText(String content, String prefix, String suffix, boolean lazyPrefix, boolean lazySuffix) { String middleText = getMiddleText(content, prefix, suffix, lazyPrefix, lazySuffix); if (middleText != null) { return new StringBuilder().append(StringUtils.defaultString(prefix)).append(middleText).append(StringUtils.defaultString(suffix)).toString(); } return null; } /** * 获取字符串中介于prefix和suffix之间的字符串 然后拼接上prefix和suffix返回 * @param content 原字符串 * @param prefix 前缀 * @param suffix 后缀 * @return 没有找到返回null。 */ public static String getWholeText(String content, String prefix, String suffix) { return getWholeText(content, prefix, suffix, true, true); } /** * 获取一个字符串中第一次出现的数字连续字符串 * @param text 原字符串 * @return 没有找到返回null */ public static String getFirstNumberFromText(String text) { return getFirstNumberFromText(text, true); } /** * 获取一个字符串中第一次出现的数字连续字符串 * @param text 原字符串 * @param justNumbers 是否要求纯数字(没有小数点) * @return 没有找到返回null */ public static String getFirstNumberFromText(String text, boolean justNumbers) { if (StringUtils.isNotBlank(text)) { String regex = justNumbers ? "\\d+" : NUMBERS_REGEX; Matcher numberMatcher = Pattern.compile(regex).matcher(text); if (numberMatcher.find()) { String number = numberMatcher.group(); return number.replace(",", ""); } } return ""; } /** * 获取uuid * @return uuid */ public static String getUUID() { return UUID.randomUUID().toString().replace("-", ""); } /** * 获取随机Spider的uuid * @return Spider的uuid */ public static String getSpiderUUID() { return "Spider" + RandomUtils.nextInt(10000, 100000); } }