StringUtils字符串工具类

StringUtils是针对Java的String类型提供补充操作的一个工具类,它确保了在处理可能为null的对象时不会抛出NullPointerException。这个工具类包含多种方法,如isNotBlank等,用于方便地进行字符串检查和处理。
摘要由CSDN通过智能技术生成

StringUtils类目录


StringUtils类是在 cn.hutool.core.util包下的一个类。

StringUtils中方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,例如,如果输入为null则返回也是null等,具体可以查看源代码)。

StringUtils的源码

package cn.hutool.core.util;

import cn.hutool.core.comparator.VersionComparator;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Matcher;
import cn.hutool.core.lang.func.Func1;
import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.text.StrSpliter;
import cn.hutool.core.text.TextSimilarity;

import java.io.StringReader;
import java.io.StringWriter;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 *
 * @author xiaoleilu
 */
public class StrUtil {
   

	public static final int INDEX_NOT_FOUND = -1;

	public static final char C_SPACE = CharUtil.SPACE;
	public static final char C_TAB = CharUtil.TAB;
	public static final char C_DOT = CharUtil.DOT;
	public static final char C_SLASH = CharUtil.SLASH;
	public static final char C_BACKSLASH = CharUtil.BACKSLASH;
	public static final char C_CR = CharUtil.CR;
	public static final char C_LF = CharUtil.LF;
	public static final char C_UNDERLINE = CharUtil.UNDERLINE;
	public static final char C_COMMA = CharUtil.COMMA;
	public static final char C_DELIM_START = CharUtil.DELIM_START;
	public static final char C_DELIM_END = CharUtil.DELIM_END;
	public static final char C_BRACKET_START = CharUtil.BRACKET_START;
	public static final char C_BRACKET_END = CharUtil.BRACKET_END;
	public static final char C_COLON = CharUtil.COLON;

	public static final String SPACE = " ";
	public static final String TAB = "	";
	public static final String DOT = ".";
	public static final String DOUBLE_DOT = "..";
	public static final String SLASH = "/";
	public static final String BACKSLASH = "\\";
	public static final String EMPTY = "";
	public static final String NULL = "null";
	public static final String CR = "\r";
	public static final String LF = "\n";
	public static final String CRLF = "\r\n";
	public static final String UNDERLINE = "_";
	public static final String DASHED = "-";
	public static final String COMMA = ",";
	public static final String DELIM_START = "{";
	public static final String DELIM_END = "}";
	public static final String BRACKET_START = "[";
	public static final String BRACKET_END = "]";
	public static final String COLON = ":";

	public static final String HTML_NBSP = " ";
	public static final String HTML_AMP = "&";
	public static final String HTML_QUOTE = """;
	public static final String HTML_APOS = "'";
	public static final String HTML_LT = "<";
	public static final String HTML_GT = ">";

	public static final String EMPTY_JSON = "{}";

	// ------------------------------------------------------------------------ Blank

	/**
	 * 字符串是否为空白 空白的定义如下: <br>
	 * 1、为null <br>
	 * 2、为不可见字符(如空格)<br>
	 * 3、""<br>
	 *
	 * @param str 被检测的字符串
	 * @return 是否为空
	 */
	public static boolean isBlank(CharSequence str) {
   
		int length;

		if ((str == null) || ((length = str.length()) == 0)) {
   
			return true;
		}

		for (int i = 0; i < length; i++) {
   
			// 只要有一个非空字符即为非空字符串
			if (false == CharUtil.isBlankChar(str.charAt(i))) {
   
				return false;
			}
		}

		return true;
	}

	/**
	 * 如果对象是字符串是否为空白,空白的定义如下: <br>
	 * 1、为null <br>
	 * 2、为不可见字符(如空格)<br>
	 * 3、""<br>
	 *
	 * @param obj 对象
	 * @return 如果为字符串是否为空串
	 * @since 3.3.0
	 */
	public static boolean isBlankIfStr(Object obj) {
   
		if (null == obj) {
   
			return true;
		} else if (obj instanceof CharSequence) {
   
			return isBlank((CharSequence) obj);
		}
		return false;
	}

	/**
	 * 字符串是否为非空白 空白的定义如下: <br>
	 * 1、不为null <br>
	 * 2、不为不可见字符(如空格)<br>
	 * 3、不为""<br>
	 *
	 * @param str 被检测的字符串
	 * @return 是否为非空
	 */
	public static boolean isNotBlank(CharSequence str) {
   
		return false == isBlank(str);
	}

	/**
	 * 是否包含空字符串
	 *
	 * @param strs 字符串列表
	 * @return 是否包含空字符串
	 */
	public static boolean hasBlank(CharSequence... strs) {
   
		if (ArrayUtil.isEmpty(strs)) {
   
			return true;
		}

		for (CharSequence str : strs) {
   
			if (isBlank(str)) {
   
				return true;
			}
		}
		return false;
	}

	/**
	 * 给定所有字符串是否为空白
	 *
	 * @param strs 字符串
	 * @return 所有字符串是否为空白
	 */
	public static boolean isAllBlank(CharSequence... strs) {
   
		if (ArrayUtil.isEmpty(strs)) {
   
			return true;
		}

		for (CharSequence str : strs) {
   
			if (isNotBlank(str)) {
   
				return false;
			}
		}
		return true;
	}

	// ------------------------------------------------------------------------ Empty

	/**
	 * 字符串是否为空,空的定义如下:<br>
	 * 1、为null <br>
	 * 2、为""<br>
	 *
	 * @param str 被检测的字符串
	 * @return 是否为空
	 */
	public static boolean isEmpty(CharSequence str) {
   
		return str == null || str.length() == 0;
	}

	/**
	 * 如果对象是字符串是否为空串空的定义如下:<br>
	 * 1、为null <br>
	 * 2、为""<br>
	 *
	 * @param obj 对象
	 * @return 如果为字符串是否为空串
	 * @since 3.3.0
	 */
	public static boolean isEmptyIfStr(Object obj) {
   
		if (null == obj) {
   
			return true;
		} else if (obj instanceof CharSequence) {
   
			return 0 == ((CharSequence) obj).length();
		}
		return false;
	}

	/**
	 * 字符串是否为非空白 空白的定义如下: <br>
	 * 1、不为null <br>
	 * 2、不为""<br>
	 *
	 * @param str 被检测的字符串
	 * @return 是否为非空
	 */
	public static boolean isNotEmpty(CharSequence str) {
   
		return false == isEmpty(str);
	}

	/**
	 * 当给定字符串为null时,转换为Empty
	 *
	 * @param str 被检查的字符串
	 * @return 原字符串或者空串
	 * @see #nullToEmpty(CharSequence)
	 * @since 4.6.3
	 */
	public static String emptyIfNull(CharSequence str) {
   
		return nullToEmpty(str);
	}

	/**
	 * 当给定字符串为null时,转换为Empty
	 *
	 * @param str 被转换的字符串
	 * @return 转换后的字符串
	 */
	public static String nullToEmpty(CharSequence str) {
   
		return nullToDefault(str, EMPTY);
	}

	/**
	 * 如果字符串是<code>null</code>,则返回指定默认字符串,否则返回字符串本身。
	 *
	 * <pre>
	 * nullToDefault(null, &quot;default&quot;)  = &quot;default&quot;
	 * nullToDefault(&quot;&quot;, &quot;default&quot;)    = &quot;&quot;
	 * nullToDefault(&quot;  &quot;, &quot;default&quot;)  = &quot;  &quot;
	 * nullToDefault(&quot;bat&quot;, &quot;default&quot;) = &quot;bat&quot;
	 * </pre>
	 *
	 * @param str        要转换的字符串
	 * @param defaultStr 默认字符串
	 * @return 字符串本身或指定的默认字符串
	 */
	public static String nullToDefault(CharSequence str, String defaultStr) {
   
		return (str == null) ? defaultStr : str.toString();
	}

	/**
	 * 如果字符串是<code>null</code>或者&quot;&quot;,则返回指定默认字符串,否则返回字符串本身。
	 *
	 * <pre>
	 * emptyToDefault(null, &quot;default&quot;)  = &quot;default&quot;
	 * emptyToDefault(&quot;&quot;, &quot;default&quot;)    = &quot;default&quot;
	 * emptyToDefault(&quot;  &quot;, &quot;default&quot;)  = &quot;  &quot;
	 * emptyToDefault(&quot;bat&quot;, &quot;default&quot;) = &quot;bat&quot;
	 * </pre>
	 *
	 * @param str        要转换的字符串
	 * @param defaultStr 默认字符串
	 * @return 字符串本身或指定的默认字符串
	 * @since 4.1.0
	 */
	public static String emptyToDefault(CharSequence str, String defaultStr) {
   
		return isEmpty(str) ? defaultStr : str.toString();
	}

	/**
	 * 如果字符串是<code>null</code>或者&quot;&quot;或者空白,则返回指定默认字符串,否则返回字符串本身。
	 *
	 * <pre>
	 * emptyToDefault(null, &quot;default&quot;)  = &quot;default&quot;
	 * emptyToDefault(&quot;&quot;, &quot;default&quot;)    = &quot;default&quot;
	 * emptyToDefault(&quot;  &quot;, &quot;default&quot;)  = &quot;default&quot;
	 * emptyToDefault(&quot;bat&quot;, &quot;default&quot;) = &quot;bat&quot;
	 * </pre>
	 *
	 * @param str        要转换的字符串
	 * @param defaultStr 默认字符串
	 * @return 字符串本身或指定的默认字符串
	 * @since 4.1.0
	 */
	public static String blankToDefault(CharSequence str, String defaultStr) {
   
		return isBlank(str) ? defaultStr : str.toString();
	}

	/**
	 * 当给定字符串为空字符串时,转换为<code>null</code>
	 *
	 * @param str 被转换的字符串
	 * @return 转换后的字符串
	 */
	public static String emptyToNull(CharSequence str) {
   
		return isEmpty(str) ? null : str.toString();
	}

	/**
	 * 是否包含空字符串
	 *
	 * @param strs 字符串列表
	 * @return 是否包含空字符串
	 */
	public static boolean hasEmpty(CharSequence... strs) {
   
		if (ArrayUtil.isEmpty(strs)) {
   
			return true;
		}

		for (CharSequence str : strs) {
   
			if (isEmpty(str)) {
   
				return true;
			}
		}
		return false;
	}

	/**
	 * 是否全部为空字符串
	 *
	 * @param strs 字符串列表
	 * @return 是否全部为空字符串
	 */
	public static boolean isAllEmpty(CharSequence... strs) {
   
		if (ArrayUtil.isEmpty(strs)) {
   
			return true;
		}

		for (CharSequence str : strs) {
   
			if (isNotEmpty(str)) {
   
				return false;
			}
		}
		return true;
	}

	/**
	 * 检查字符串是否为null、“null”、“undefined”
	 *
	 * @param str 被检查的字符串
	 * @return 是否为null、“null”、“undefined”
	 * @since 4.0.10
	 */
	public static boolean isNullOrUndefined(CharSequence str) {
   
		if (null == str) {
   
			return true;
		}
		return isNullOrUndefinedStr(str);
	}

	/**
	 * 检查字符串是否为null、“”、“null”、“undefined”
	 *
	 * @param str 被检查的字符串
	 * @return 是否为null、“”、“null”、“undefined”
	 * @since 4.0.10
	 */
	public static boolean isEmptyOrUndefined(CharSequence str) {
   
		if (isEmpty(str)) {
   
			return true;
		}
		return isNullOrUndefinedStr(str);
	}

	/**
	 * 检查字符串是否为null、空白串、“null”、“undefined”
	 *
	 * @param str 被检查的字符串
	 * @return 是否为null、空白串、“null”、“undefined”
	 * @since 4.0.10
	 */
	public static boolean isBlankOrUndefined(CharSequence str) {
   
		if (isBlank(str)) {
   
			return true;
		}
		return isNullOrUndefinedStr(str);
	}

	/**
	 * 是否为“null”、“undefined”,不做空指针检查
	 *
	 * @param str 字符串
	 * @return 是否为“null”、“undefined”
	 */
	private static boolean isNullOrUndefinedStr(CharSequence str) {
   
		String strString = str.toString().trim();
		return NULL.equals(strString) || "undefined".equals(strString);
	}

	// ------------------------------------------------------------------------ Trim

	/**
	 * 除去字符串头尾部的空白,如果字符串是<code>null</code>,依然返回<code>null</code>。
	 *
	 * <p>
	 * 注意,和<code>String.trim</code>不同,此方法使用<code>NumberUtil.isBlankChar</code> 来判定空白, 因而可以除去英文字符集之外的其它空白,如中文空格。
	 *
	 * <pre>
	 * trim(null)          = null
	 * trim(&quot;&quot;)            = &quot;&quot;
	 * trim(&quot;     &quot;)       = &quot;&quot;
	 * trim(&quot;abc&quot;)         = &quot;abc&quot;
	 * trim(&quot;    abc    &quot;) = &quot;abc&quot;
	 * </pre>
	 *
	 * @param str 要处理的字符串
	 * @return 除去头尾空白的字符串,如果原字串为<code>null</code>,则返回<code>null</code>
	 */
	public static String trim(CharSequence str) {
   
		return (null == str) ? null : trim(str, 0);
	}

	/**
	 * 给定字符串数组全部做去首尾空格
	 *
	 * @param strs 字符串数组
	 */
	public static void trim(String[] strs) {
   
		if (null == strs) {
   
			return;
		}
		String str;
		for (int i = 0; i < strs.length; i++) {
   
			str = strs[i];
			if (null != str) {
   
				strs[i] = str.trim();
			}
		}
	}

	/**
	 * 除去字符串头尾部的空白,如果字符串是{@code null},返回<code>""</code>。
	 *
	 * <pre>
	 * StrUtil.trimToEmpty(null)          = ""
	 * StrUtil.trimToEmpty("")            = ""
	 * StrUtil.trimToEmpty("     ")       = ""
	 * StrUtil.trimToEmpty("abc")         = "abc"
	 * StrUtil.trimToEmpty("    abc    ") = "abc"
	 * </pre>
	 *
	 * @param str 字符串
	 * @return 去除两边空白符后的字符串, 如果为null返回""
	 * @since 3.1.1
	 */
	public static String trimToEmpty(CharSequence str) {
   
		return str == null ? EMPTY : trim(str);
	}

	/**
	 * 除去字符串头尾部的空白,如果字符串是{@code null},返回<code>""</code>。
	 *
	 * <pre>
	 * StrUtil.trimToNull(null)          = null
	 * StrUtil.trimToNull("")            = null
	 * StrUtil.trimToNull("     ")       = null
	 * StrUtil.trimToNull("abc")         = "abc"
	 * StrUtil.trimToEmpty("    abc    ") = "abc"
	 * </pre>
	 *
	 * @param str 字符串
	 * @return 去除两边空白符后的字符串, 如果为空返回null
	 * @since 3.2.1
	 */
	public static String trimToNull(CharSequence str) {
   
		final String trimStr = trim(str);
		return EMPTY.equals(trimStr) ? null : trimStr;
	}

	/**
	 * 除去字符串头部的空白,如果字符串是<code>null</code>,则返回<code>null</code>。
	 *
	 * <p>
	 * 注意,和<code>String.trim</code>不同,此方法使用<code>CharUtil.isBlankChar</code> 来判定空白, 因而可以除去英文字符集之外的其它空白,如中文空格。
	 *
	 * <pre>
	 * trimStart(null)         = null
	 * trimStart(&quot;&quot;)           = &quot;&quot;
	 * trimStart(&quot;abc&quot;)        = &quot;abc&quot;
	 * trimStart(&quot;  abc&quot;)      = &quot;abc&quot;
	 * trimStart(&quot;abc  &quot;)      = &quot;abc  &quot;
	 * trimStart(&quot; abc &quot;)      = &quot;abc &quot;
	 * </pre>
	 *
	 * @param str 要处理的字符串
	 * @return 除去空白的字符串,如果原字串为<code>null</code>或结果字符串为<code>""</code>,则返回 <code>null</code>
	 */
	public static String trimStart(CharSequence str) {
   
		return trim(str, -1);
	}

	/**
	 * 除去字符串尾部的空白,如果字符串是<code>null</code>,则返回<code>null</code>。
	 *
	 * <p>
	 * 注意,和<code>String.trim</code>不同,此方法使用<code>CharUtil.isBlankChar</code> 来判定空白, 因而可以除去英文字符集之外的其它空白,如中文空格。
	 *
	 * <pre>
	 * trimEnd(null)       = null
	 * trimEnd(&quot;&quot;)         = &quot;&quot;
	 * trimEnd(&quot;abc&quot;)      = &quot;abc&quot;
	 * trimEnd(&quot;  abc&quot;)    = &quot;  abc&quot;
	 * trimEnd(&quot;abc  &quot;)    = &quot;abc&quot;
	 * trimEnd(&quot; abc &quot;)    = &quot; abc&quot;
	 * </pre>
	 *
	 * @param str 要处理的字符串
	 * @return 除去空白的字符串,如果原字串为<code>null</code>或结果字符串为<code>""</code>,则返回 <code>null</code>
	 */
	public static String trimEnd(CharSequence str) {
   
		return trim(str, 1);
	}

	/**
	 * 除去字符串头尾部的空白符,如果字符串是<code>null</code>,依然返回<code>null</code>。
	 *
	 * @param str  要处理的字符串
	 * @param mode <code>-1</code>表示trimStart,<code>0</code>表示trim全部, <code>1</code>表示trimEnd
	 * @return 除去指定字符后的的字符串,如果原字串为<code>null</code>,则返回<code>null</code>
	 */
	public static String trim(CharSequence str, int mode) {
   
		if (str == null) {
   
			return null;
		}

		int length = str.length();
		int start = 0;
		int end = length;

		// 扫描字符串头部
		if (mode <= 0) {
   
			while ((start < end) && (CharUtil.isBlankChar(str.charAt(start)))) {
   
				start++;
			}
		}

		// 扫描字符串尾部
		if (mode >= 0) {
   
			while ((start < end) && (CharUtil.isBlankChar(str.charAt(end - 1)))) {
   
				end--;
			}
		}

		if ((start > 0) || (end < length)) {
   
			return str.toString().substring(start, end);
		}

		return str.toString();
	}

	/**
	 * 字符串是否以给定字符开始
	 *
	 * @param str 字符串
	 * @param c   字符
	 * @return 是否开始
	 */
	public static boolean startWith(CharSequence str, char c) {
   
		return c == str.charAt(0);
	}

	/**
	 * 是否以指定字符串开头<br>
	 * 如果给定的字符串和开头字符串都为null则返回true,否则任意一个值为null返回false
	 *
	 * @param str          被监测字符串
	 * @param prefix       开头字符串
	 * @param isIgnoreCase 是否忽略大小写
	 * @return 是否以指定字符串开头
	 */
	public static boolean startWith(CharSequence str, CharSequence prefix, boolean isIgnoreCase) {
   
		if (null == str || null == prefix) {
   
			return null == str && null == prefix;
		}

		if (isIgnoreCase) {
   
			return str.toString().toLowerCase().startsWith(prefix.toString().toLowerCase());
		} else {
   
			return str.toString().startsWith(prefix.toString());
		}
	}

	/**
	 * 是否以指定字符串开头
	 *
	 * @param str    被监测字符串
	 * @param prefix 开头字符串
	 * @return 是否以指定字符串开头
	 */
	public static boolean startWith(CharSequence str, CharSequence prefix) {
   
		return startWith(str, prefix, false);
	}

	/**
	 * 是否以指定字符串开头,忽略大小写
	 *
	 * @param str    被监测字符串
	 * @param prefix 开头字符串
	 * @return 是否以指定字符串开头
	 */
	public static boolean startWithIgnoreCase(CharSequence str, CharSequence prefix) {
   
		return startWith(str, prefix, true);
	}

	/**
	 * 给定字符串是否以任何一个字符串开始<br>
	 * 给定字符串和数组为空都返回false
	 *
	 * @param str      给定字符串
	 * @param prefixes 需要检测的开始字符串
	 * @return 给定字符串是否以任何一个字符串开始
	 * @since 3.0.6
	 */
	public static boolean startWithAny(CharSequence str, CharSequence... prefixes) {
   
		if (isEmpty(str) || ArrayUtil.isEmpty(prefixes)) {
   
			return false;
		}

		for (CharSequence suffix : prefixes) {
   
			if (startWith(str, suffix, false)) {
   
				return true;
			}
		}
		return false;
	}

	/**
	 * 字符串是否以给定字符结尾
	 *
	 * @param str 字符串
	 * @param c   字符
	 * @return 是否结尾
	 */
	public static boolean endWith(CharSequence str, char c) {
   
		return c == str.charAt(str.length() - 1);
	}

	/**
	 * 是否以指定字符串结尾<br>
	 * 如果给定的字符串和开头字符串都为null则返回true,否则任意一个值为null返回false
	 *
	 * @param str          被监测字符串
	 * @param suffix       结尾字符串
	 * @param isIgnoreCase 是否忽略大小写
	 * @return 是否以指定字符串结尾
	 */
	public static boolean endWith(CharSequence str, CharSequence suffix, boolean isIgnoreCase) {
   
		if (null == str || null == suffix) {
   
			return null == str && null == suffix;
		}

		if (isIgnoreCase) {
   
			return str.toString().toLowerCase().endsWith(suffix.toString().toLowerCase());
		} else {
   
			return str.toString().endsWith(suffix.toString());
		}
	}

	/**
	 * 是否以指定字符串结尾
	 *
	 * @param str    被监测字符串
	 * @param suffix 结尾字符串
	 * @return 是否以指定字符串结尾
	 */
	public static boolean endWith(CharSequence str, CharSequence suffix) {
   
		return endWith(str, suffix, false);
	}

	/**
	 * 是否以指定字符串结尾,忽略大小写
	 *
	 * @param str    被监测字符串
	 * @param suffix 结尾字符串
	 * @return 是否以指定字符串结尾
	 */
	public static boolean endWithIgnoreCase(CharSequence str, CharSequence suffix) {
   
		return endWith(str, suffix, true);
	}

	/**
	 * 给定字符串是否以任何一个字符串结尾<br>
	 * 给定字符串和数组为空都返回false
	 *
	 * @param str      给定字符串
	 * @param suffixes 需要检测的结尾字符串
	 * @return 给定字符串是否以任何一个字符串结尾
	 * @since 3.0.6
	 */
	public static boolean endWithAny(CharSequence str, CharSequence... suffixes) {
   
		if (isEmpty(str) || ArrayUtil.isEmpty(suffixes)) {
   
			return false;
		}

		for (CharSequence suffix : suffixes) {
   
			if (endWith(str, suffix, false)) {
   
				return true;
			}
		}
		return false;
	}

	/**
	 * 指定字符是否在字符串中出现过
	 *
	 * @param str        字符串
	 * @param searchChar 被查找的字符
	 * @return 是否包含
	 * @since 3.1.2
	 */
	public static boolean contains(CharSequence str, char searchChar) {
   
		return indexOf(str, searchChar) > -1;
	}

	/**
	 * 指定字符串是否在字符串中出现过
	 *
	 * @param str       字符串
	 * @param searchStr 被查找的字符串
	 * @return 是否包含
	 * @since 5.1.1
	 */
	public static boolean contains(CharSequence str, CharSequence searchStr) {
   
		if (null == str || null == searchStr) {
   
			return false;
		}
		return str.toString().contains(searchStr);
	}

	/**
	 * 查找指定字符串是否包含指定字符串列表中的任意一个字符串
	 *
	 * @param str      指定字符串
	 * @param testStrs 需要检查的字符串数组
	 * @return 是否包含任意一个字符串
	 * @since 3.2.0
	 */
	public static boolean containsAny(CharSequence str, CharSequence... testStrs) {
   
		return null != getContainsStr(str, testStrs);
	}

	/**
	 * 查找指定字符串是否包含指定字符列表中的任意一个字符
	 *
	 * @param str       指定字符串
	 * @param testChars 需要检查的字符数组
	 * @return 是否包含任意一个字符
	 * @since 4.1.11
	 */
	public static boolean containsAny(CharSequence str, char... testChars) {
   
		if (false == isEmpty(str)) {
   
			int len = str.length();
			for (int i = 0; i < len; i++) {
   
				if (ArrayUtil.contains(testChars, str.charAt(i))) {
   
					return true;
				}
			}
		}
		return false;
	}

	/**
	 * 检查指定字符串中是否只包含给定的字符
	 *
	 * @param str       字符串
	 * @param testChars 检查的字符
	 * @return 字符串含有非检查的字符,返回false
	 * @since 4.4.1
	 */
	public static boolean containsOnly(CharSequence str, char... testChars) {
   
		if (false == isEmpty(str)) {
   
			int len = str.length();
			for (int i = 0; i < len; i++) {
   
				if (false == ArrayUtil.contains(testChars, str.charAt(i))) {
   
					return false;
				}
			}
		}
		return true;
	}

	/**
	 * 给定字符串是否包含空白符(空白符包括空格、制表符、全角空格和不间断空格)<br>
	 * 如果给定字符串为null或者"",则返回false
	 *
	 * @param str 字符串
	 * @return 是否包含空白符
	 * @since 4.0.8
	 */
	public static boolean containsBlank(CharSequence str) {
   
		if (null == str) {
   
			return false;
		}
		final int length = str.length();
		if (0 == length) {
   
			return false;
		}

		for (int i = 0; i < length; i += 1) {
   
			if (CharUtil.isBlankChar(str.charAt(i))) {
   
				return true;
			}
		}
		return false;
	}

	/**
	 * 查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串
	 *
	 * @param str      指定字符串
	 * @param testStrs 需要检查的字符串数组
	 * @return 被包含的第一个字符串
	 * @since 3.2.0
	 */
	public static String getContainsStr(CharSequence str, CharSequence... testStrs) {
   
		if (isEmpty(str) || ArrayUtil.isEmpty(testStrs)) {
   
			return null;
		}
		for (CharSequence checkStr : testStrs) {
   
			if (str.toString().contains(checkStr)) {
   
				return checkStr.toString();
			}
		}
		return null;
	}

	/**
	 * 是否包含特定字符,忽略大小写,如果给定两个参数都为<code>null</code>,返回true
	 *
	 * @param str     被检测字符串
	 * @param testStr 被测试是否包含的字符串
	 * @return 是否包含
	 */
	public static boolean containsIgnoreCase(CharSequence str, CharSequence testStr) {
   
		if (null == str) {
   
			// 如果被监测字符串和
			return null == testStr;
		}
		return str.toString().toLowerCase().contains(testStr.toString().toLowerCase());
	}

	/**
	 * 查找指定字符串是否包含指定字符串列表中的任意一个字符串<br>
	 * 忽略大小写
	 *
	 * @param str      指定字符串
	 * @param testStrs 需要检查的字符串数组
	 * @return 是否包含任意一个字符串
	 * @since 3.2.0
	 */
	public static boolean containsAnyIgnoreCase(CharSequence str, CharSequence... testStrs) {
   
		return null != getContainsStrIgnoreCase(str, testStrs);
	}

	/**
	 * 查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串<br>
	 * 忽略大小写
	 *
	 * @param str      指定字符串
	 * @param testStrs 需要检查的字符串数组
	 * @return 被包含的第一个字符串
	 * @since 3.2.0
	 */
	public static String getContainsStrIgnoreCase(CharSequence str, CharSequence... testStrs) {
   
		if (isEmpty(str) || ArrayUtil.isEmpty(testStrs)) {
   
			return null;
		}
		for (CharSequence testStr : testStrs) {
   
			if (containsIgnoreCase(str, testStr)) {
   
				return testStr.toString();
			}
		}
		return null;
	}

	/**
	 * 获得set或get或is方法对应的标准属性名<br>
	 * 例如:setName 返回 name
	 *
	 * <pre>
	 * getName =》name
	 * setName =》name
	 * isName  =》name
	 * </pre>
	 *
	 * @param getOrSetMethodName Get或Set方法名
	 * @return 如果是set或get方法名,返回field, 否则null
	 */
	public static String getGeneralField(CharSequence getOrSetMethodName) {
   
		final String getOrSetMethodNameStr = getOrSetMethodName.toString();
		if (getOrSetMethodNameStr.startsWith("get") || getOrSetMethodNameStr.startsWith("set")) {
   
			return removePreAndLowerFirst(getOrSetMethodName, 3);
		} else if (getOrSetMethodNameStr.startsWith("is")) {
   
			return removePreAndLowerFirst(getOrSetMethodName, 2);
		}
		return null;
	}

	/**
	 * 生成set方法名<br>
	 * 例如:name 返回 setName
	 *
	 * @param fieldName 属性名
	 * @return setXxx
	 */
	
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北街风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值