package cn.hutool.core.text;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.comparator.VersionComparator;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Filter;
import cn.hutool.core.lang.Matcher;
import cn.hutool.core.lang.func.Func1;
import cn.hutool.core.text.finder.CharFinder;
import cn.hutool.core.text.finder.Finder;
import cn.hutool.core.text.finder.StrFinder;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.DesensitizedUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.MessageFormat;
import java.text.Normalizer;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
/**
* {@link CharSequence} 相关工具类封装
*
* @author looly
* @since 5.5.3
*/
public class CharSequenceUtil {
public static final int INDEX_NOT_FOUND = Finder.INDEX_NOT_FOUND;
/**
* 字符串常量:{@code "null"} <br>
* 注意:{@code "null" != null}
*/
public static final String NULL = "null";
/**
* 字符串常量:空字符串 {@code ""}
*/
public static final String EMPTY = "";
/**
* 字符串常量:空格符 {@code " "}
*/
public static final String SPACE = " ";
/**
* <p>字符串是否为空白,空白的定义如下:</p>
* <ol>
* <li>{@code null}</li>
* <li>空字符串:{@code ""}</li>
* <li>空格、全角空格、制表符、换行符,等不可见字符</li>
* </ol>
*
* <p>例:</p>
* <ul>
* <li>{@code StrUtil.isBlank(null) // true}</li>
* <li>{@code StrUtil.isBlank("") // true}</li>
* <li>{@code StrUtil.isBlank(" \t\n") // true}</li>
* <li>{@code StrUtil.isBlank("abc") // false}</li>
* </ul>
*
* <p>注意:该方法与 {@link #isEmpty(CharSequence)} 的区别是:
* 该方法会校验空白字符,且性能相对于 {@link #isEmpty(CharSequence)} 略慢。</p>
* <br>
*
* <p>建议:</p>
* <ul>
* <li>该方法建议仅对于客户端(或第三方接口)传入的参数使用该方法。</li>
* <li>需要同时校验多个字符串时,建议采用 {@link #hasBlank(CharSequence...)} 或 {@link #isAllBlank(CharSequence...)}</li>
* </ul>
*
* @param str 被检测的字符串
* @return 若为空白,则返回 true
* @see #isEmpty(CharSequence)
*/
public static boolean isBlank(CharSequence str) {
final 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;
}
/**
* <p>字符串是否为非空白,非空白的定义如下: </p>
* <ol>
* <li>不为 {@code null}</li>
* <li>不为空字符串:{@code ""}</li>
* <li>不为空格、全角空格、制表符、换行符,等不可见字符</li>
* </ol>
*
* <p>例:</p>
* <ul>
* <li>{@code StrUtil.isNotBlank(null) // false}</li>
* <li>{@code StrUtil.isNotBlank("") // false}</li>
* <li>{@code StrUtil.isNotBlank(" \t\n") // false}</li>
* <li>{@code StrUtil.isNotBlank("abc") // true}</li>
* </ul>
*
* <p>注意:该方法与 {@link #isNotEmpty(CharSequence)} 的区别是:
* 该方法会校验空白字符,且性能相对于 {@link #isNotEmpty(CharSequence)} 略慢。</p>
* <p>建议:仅对于客户端(或第三方接口)传入的参数使用该方法。</p>
*
* @param str 被检测的字符串
* @return 是否为非空
* @see #isBlank(CharSequence)
*/
public static boolean isNotBlank(CharSequence str) {
return !isBlank(str);
}
/**
* <p>指定字符串数组中,是否包含空字符串。</p>
* <p>如果指定的字符串数组的长度为 0,或者其中的任意一个元素是空字符串,则返回 true。</p>
* <br>
*
* <p>例:</p>
* <ul>
* <li>{@code StrUtil.hasBlank() // true}</li>
* <li>{@code StrUtil.hasBlank("", null, " ") // true}</li>
* <li>{@code StrUtil.hasBlank("123", " ") // true}</li>
* <li>{@code StrUtil.hasBlank("123", "abc") // false}</li>
* </ul>
*
* <p>注意:该方法与 {@link #isAllBlank(CharSequence...)} 的区别在于:</p>
* <ul>
* <li>hasBlank(CharSequence...) 等价于 {@code isBlank(...) || isBlank(...) || ...}</li>
* <li>{@link #isAllBlank(CharSequence...)} 等价于 {@code isBlank(...) && isBlank(...) && ...}</li>
* </ul>
*
* @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;
}
/**
* <p>指定字符串数组中的元素,是否全部为空字符串。</p>
* <p>如果指定的字符串数组的长度为 0,或者所有元素都是空字符串,则返回 true。</p>
* <br>
*
* <p>例:</p>
* <ul>
* <li>{@code StrUtil.isAllBlank() // true}</li>
* <li>{@code StrUtil.isAllBlank("", null, " ") // true}</li>
* <li>{@code StrUtil.isAllBlank("123", " ") // false}</li>
* <li>{@code StrUtil.isAllBlank("123", "abc") // false}</li>
* </ul>
*
* <p>注意:该方法与 {@link #hasBlank(CharSequence...)} 的区别在于:</p>
* <ul>
* <li>{@link #hasBlank(CharSequence...)} 等价于 {@code isBlank(...) || isBlank(...) || ...}</li>
* <li>isAllBlank(CharSequence...) 等价于 {@code isBlank(...) && isBlank(...) && ...}</li>
* </ul>
*
* @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;
}
/**
* <p>字符串是否为空,空的定义如下:</p>
* <ol>
* <li>{@code null}</li>
* <li>空字符串:{@code ""}</li>
* </ol>
*
* <p>例:</p>
* <ul>
* <li>{@code StrUtil.isEmpty(null) // true}</li>
* <li>{@code StrUtil.isEmpty("") // true}</li>
* <li>{@code StrUtil.isEmpty(" \t\n") // false}</li>
* <li>{@code StrUtil.isEmpty("abc") // false}</li>
* </ul>
*
* <p>注意:该方法与 {@link #isBlank(CharSequence)} 的区别是:该方法不校验空白字符。</p>
* <p>建议:</p>
* <ul>
* <li>该方法建议用于工具类或任何可以预期的方法参数的校验中。</li>
* <li>需要同时校验多个字符串时,建议采用 {@link #hasEmpty(CharSequence...)} 或 {@link #isAllEmpty(CharSequence...)}</li>
* </ul>
*
* @param str 被检测的字符串
* @return 是否为空
* @see #isBlank(CharSequence)
*/
public static boolean isEmpty(CharSequence str) {
return str == null || str.length() == 0;
}
/**
* <p>字符串是否为非空白,非空白的定义如下: </p>
* <ol>
* <li>不为 {@code null}</li>
* <li>不为空字符串:{@code ""}</li>
* </ol>
*
* <p>例:</p>
* <ul>
* <li>{@code StrUtil.isNotEmpty(null) // false}</li>
* <li>{@code StrUtil.isNotEmpty("") // false}</li>
* <li>{@code StrUtil.isNotEmpty(" \t\n") // true}</li>
* <li>{@code StrUtil.isNotEmpty("abc") // true}</li>
* </ul>
*
* <p>注意:该方法与 {@link #isNotBlank(CharSequence)} 的区别是:该方法不校验空白字符。</p>
* <p>建议:该方法建议用于�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当; Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
资源推荐
资源详情
资源评论
收起资源包目录
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率 (2000个子文件)
formForUpload.html 339B
index.html 114B
CharSequenceUtil.java 140KB
FileUtil.java 104KB
CollUtil.java 88KB
NumberUtil.java 79KB
ImgUtil.java 75KB
PrimitiveArrayUtil.java 73KB
DateUtil.java 63KB
ArrayUtil.java 54KB
FileMagicNumber.java 47KB
XmlUtil.java 44KB
ExcelWriter.java 43KB
MapUtil.java 41KB
Assert.java 39KB
DateUtilTest.java 39KB
ReflectUtil.java 39KB
IoUtil.java 38KB
HttpRequest.java 36KB
CompareToBuilder.java 34KB
SecureUtil.java 34KB
CollUtilTest.java 34KB
AbstractDb.java 33KB
ZipUtil.java 33KB
Validator.java 33KB
ClassUtil.java 32KB
HashCodeBuilder.java 31KB
FastDatePrinter.java 31KB
BeanUtil.java 31KB
AntPathMatcher.java 30KB
KeyUtil.java 30KB
IterUtil.java 30KB
ReUtil.java 29KB
Convert.java 29KB
ExcelWriteTest.java 28KB
HttpUtil.java 27KB
DateTime.java 27KB
Img.java 26KB
JSONUtil.java 26KB
BCrypt.java 25KB
BeanUtilTest.java 25KB
QrCodeUtil.java 25KB
FastDateParser.java 24KB
Money.java 24KB
JSONObjectTest.java 24KB
IdcardUtil.java 24KB
CalendarUtil.java 23KB
NetUtil.java 23KB
ObjectUtil.java 22KB
ThreadUtil.java 22KB
UserAgentUtilTest.java 21KB
JakartaServletUtil.java 21KB
ServletUtil.java 21KB
AnnotationUtil.java 21KB
PathUtil.java 21KB
URLUtil.java 21KB
StrUtilTest.java 20KB
LocalDateTimeUtil.java 20KB
LinkedForestMap.java 20KB
Opt.java 20KB
Html4Escape.java 19KB
JSONObject.java 19KB
Setting.java 19KB
Ftp.java 19KB
GenericSynthesizedAggregateAnnotationTest.java 19KB
ListUtil.java 18KB
MailAccount.java 18KB
NumberUtilTest.java 18KB
Sftp.java 18KB
JschUtil.java 18KB
HttpResponse.java 18KB
GifDecoder.java 17KB
SM2.java 17KB
CellUtil.java 17KB
HTMLFilter.java 17KB
UrlBuilderTest.java 17KB
RandomUtil.java 17KB
ArrayUtilTest.java 17KB
EqualsBuilder.java 17KB
ExcelUtil.java 17KB
SoapClient.java 16KB
Hashids.java 16KB
NumberChineseFormatter.java 16KB
MailUtil.java 16KB
FileUtilTest.java 16KB
AnimatedGifEncoder.java 15KB
Dict.java 15KB
StrSplitter.java 15KB
Props.java 15KB
JSONArray.java 15KB
CityHash.java 15KB
ExcelBase.java 15KB
SqlBuilder.java 15KB
ConverterRegistry.java 14KB
SymmetricCrypto.java 14KB
HttpUtilTest.java 14KB
StatementWrapper.java 14KB
CollStreamUtil.java 14KB
StrBuilder.java 14KB
NumberChineseFormatterTest.java 14KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6656
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功