package com.cnksi.utils;
import com.jfinal.kit.StrKit;
import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringUtil {
/**
* 替换空格、换行符等不可见字符
*
* @param str
* @return
*/
public static String replaceSpace(String str) {
String result = str;
if (str != null && str.length() > 0) { // 替换空格、换行符等不可见字符
String regEx = "\\s| {1,}";
Pattern pattern = Pattern.compile(regEx);
Matcher m = pattern.matcher(str);
result = m.replaceAll("").trim();
}
return result;
}
// /**
// * 判断一个字符串是否为纯文本数字
// */
// public static boolean isNumeric(String str) {
// Pattern pattern = Pattern.compile("[0-9]{1,}"); // 数字至少出现1次
// Matcher isNum = pattern.matcher(str);
// if (!isNum.matches()) {
// return false;
// }
// return true;
// }
/**
* 是否为数字
*
* @return
*/
public static boolean isNumeric(String str) {
if (str == null || str.isEmpty()) {
return false;
}
char[] arr = str.toCharArray();
for (char c : arr) {
if (!Character.isDigit(c)) {
return false;
}
}
return true;
}
/**
* 验证某个字符是否为数字
*
* @param str
* @return
*/
public static boolean isNumber(String str) {
if (isBlank(str)) {
return false;
}
// 该正则表达式可以匹配所有的数字 包括负数
Pattern pattern = Pattern.compile("-?[0-9]+\\.?[0-9]*");
String bigStr;
try {
bigStr = new BigDecimal(str).toString();
} catch (Exception e) {
return false;//异常 说明包含非数字。
}
Matcher isNum = pattern.matcher(bigStr); // matcher是全匹配
if (!isNum.matches()) {
return false;
}
return true;
}
/**
* 如果字符串为空,返回空字符串,否则调用trim方法
*
* @param str
* @return
*/
public static String trimToEmpty(String str) {
return str == null ? "" : str.trim();
}
/**
* 如果字符串不为空,调用trim方法
*
* @param str
* @return
*/
public static String trimToNull(String str) {
return str == null ? null : str.trim();
}
/**
* 调用对象的toString()方法,如果对象为 null 返回空字符串("")
*
* @param o
* @return
*/
public static String toStr(Object o) {
return o == null ? "" : o.toString();
}
public static String replaceBlank(String str) {
if (str != null) {
str = str.replaceAll("\\s*|\t|\r|\n", "");
}
return str;
}
public static boolean isEmpty(String str) {
return str == null || str.isEmpty();
}
public static boolean notEmpty(String str) {
return !isEmpty(str);
}
public static boolean notBlank(String str) {
return str == null || "".equals(str.trim()) || "null".equals(str) ? false : true;
}
/**
* 是否全都为空
*
* @param str
* @return
*/
public static boolean isBlank(String... str) {
for (String s : str) {
if (notBlank(s))
return false;
}
return true;
}
/**
* 是否至少有一个为空
*
* @param str
* @return
*/
public static boolean isBlankOneLeast(String... str) {
for (String s : str) {
if (isBlank(s))
return true;
}
return false;
}
/**
* @param offset 从第几位分割
* @param str 需要分割的字符串
* @param symbol 需要用什么分割
* @return 返回分割后的字符串
*/
public static String insertStrToString(int offset, String str, String symbol) {
if (!StrKit.isBlank(str)) {
StringBuilder sb = new StringBuilder(str);
for (int i = offset; i < sb.length(); i += offset) {
sb.insert(i++, symbol);
}
return sb.toString();
}
return "";
}
/**
* 去掉首位字符(逗号等)
*
* @param str
* @param c 去掉的字符
*/
public static String trimChar(String str, String c) {
if (isBlank(str) || isBlank(c))
return trimToNull(str);
int len = c.length();
// 去掉之前的字符
if (str.startsWith(c)) {
str = str.substring(len);
}
// 去掉之后的字符
if (str.endsWith(c)) {
str = str.substring(0, str.length() - len);
}
return str;
}
/**
* 多个逗号转换为单个逗号 并去掉首尾逗号
*
* @param s
* @return
*/
public static String dealWithComma(String s) {
if (s.length() > 0) {
s = s.replaceAll("[',']+", ",");// 多个,,,,替换为,
// 去掉首尾,
if (s.startsWith(",")) {
s = s.substring(1);
}
if (s.endsWith(",")) {
s = s.substring(0, s.length() - 1);
}
}
return s;
}
/**
* String[] 拼接字符串方法 包含引号
*
* @param s
* @return 's1','s2','s3'
*/
public static String genStrWithQuote(String[] s) {
String re = "";
for (String tmp : s) {
re = re + "'" + tmp + "',";
}
return dealWithComma(re);
}
/**
* String[] 拼接字符串方法 不含引号
*
* @param s
* @return s1, s2, s3
*/
public static String genStrNoQuote(String[] s) {
return genStrWithQuote(s).replace("'", "");
}
/**
* 因为系统内部存在字符串拼接SQL语句,并未使用占位符,所以需手动过滤特殊字符防止SQL注入
*
* @param str
* @return
*/
public static String TransactSQLInjection(String str) {
return str.replaceAll("([';])+|(--)+", "");
}
/**
* 获取文件名称后缀
*
* @param fileName 文件名称
* @return 后缀
*/
public static String getFileSuffix(String fileName) {
if (isBlank(fileName) || !fileName.contains(".")) {
return "";
}
return fileName.substring(fileName.indexOf(".") + 1, fileName.length());
}
/**
* 手机号验证
*
* @param str
* @return 验证通过返回true
* @author :shijing
* 2016年12月5日下午4:34:46
*/
public static boolean isMobile(final String str) {
Pattern p;
Matcher m;
boolean b;
p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$"); // 验证手机号
m = p.matcher(str);
b = m.matches();
return b;
}
/**
* 电话号码验证
*
* @param str
* @return 验证通过返回true
* @author :shijing
* 2016年12月5日下午4:34:21
*/
public static boolean isPhone(final String str) {
Pattern p1, p2;
Matcher m;
boolean b;
p1 = Pattern.compile("^[0][1-9]{2,3}-[0-9]{5,10}$"); // 验证带区号的
p2 = Pattern.compile("^[1-9]{1}[0-9]{5,8}$"); // 验证没有区号的
if (str.length() > 9) {
m = p1.matcher(str);
b = m.matches();
} else {
m = p2.matcher(str);
b = m.matches();
}
return b;
}
/**
* 验证是否为正确的邮箱号
*
* @param email 需要验证的邮箱地址
* @return
*/
public static boolean isValidEmail(String email) {
// 1、\\w+表示@之前至少要输入一个匹配字母或数字或下划线 \\w 单词字符:[a-zA-Z_0-9]
// 2、(\\w+\\.)表示域名. 如新浪邮箱域名是sina.com.cn
// {1,3}表示可以出现一次或两次或者三次.
String reg = "\\w+@(\\w+\\.){1,3}\\w+";
Pattern pattern = Pattern.compile(reg);
boolean flag = false;
if (email != null) {
Matcher matcher = pattern.matcher(email);
flag = matcher.matches();
}
return flag;
}
public static void main(String[] args) {
//System.out.println(isValidEmail("1@qq.cn"));
}
/**
* 将字符(保留前3位,保留后四位,中间替换为 *)用于身份证或者电话、银行卡号等敏感信息显示
*
* @param str
* @return
*/
public static String replaceSensitiveStr(String str) {
if (isBlank(str) || str.length() < 11)
return str;
str = str.replaceAll("(?<=[\\d]{3})\\d(?=([\\d]|[a-z]|[A-Z]){4})", "*"); //这里*只要一个,因为会替代多次,每次一个。
return str;
}
}
相关推荐
java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)
主要介绍了java使用正则表达式进行表单验证工具类,可以验证邮箱、手机号码、qq号码等方法,需要的朋友可以参考下
C# 去除字符串中的空格方案整理
(匹配任何空白字符,包括空格,制表符,换页符等,与[\f\n\t\r\v]等效)可以去掉字符串中 所有 的空格。去掉字符串 前后 的空格。四、完善中.....
S32K3双核实战:手把手教你用EB配置CAN与CANFD(附中断/轮询代码对比)
本文详细解析了NXP S32K3双核处理器在CAN/CANFD通信开发中的实战应用。通过Elektrobit配置工具链,从双核通信架构设计到EB tresos Studio配置全流程,再到中断与轮询模式的代码实现对比,全面指导开发者优化S32K3 FlexCAN模块性能,提升汽车电子系统的通信效率与可靠性。
Jfinal 框架 在Html页面使用 #if(调用java方法) #end
欢迎转发分享: 转发请附上本文地址: https://editor.youkuaiyun.com/md?articleId=106399780 需求: 实现在html 中使用 #if(调用java类中的方法) #end; 技术: JFinal后台框架 JFinal 官方文档:https://jfinal.com/doc/6-3 文档讲解: 需要使用到模板引擎, 官方文档写法 如上截图中内容:使用样式 #if(com.jfinal.kit.StrKit::isBlank(title)) .... #.
告别密码明文传输:手把手带你用Python实现SRP-6协议(附完整代码)
本文详细介绍了如何使用Python实现SRP-6协议,确保密码安全传输和存储。通过零知识证明与密钥交换技术,SRP协议在不传输明文密码的情况下完成认证,适用于金融App等高安全需求场景。文章包含完整代码示例和实战技巧,帮助开发者规避常见安全陷阱。
【深度学习3】ubuntu22.04从零开始搭建深度学习环境
ubuntu22.04从零开始搭建深度学习开发环境
C#(去、过滤)掉字符中的换行符(\r\n) (实用)
参考:https://www.cnblogs.com/ShaYeBlog/p/5082874.html 本文介绍的方法需要先导入命名空间:usingSystem.Text.RegularExpressions; 字符串里所有的的换行符都去掉:textStr = Regex.Replace(textStr, @"[/n/r]", ""); 去掉末...
2024最新版Anaconda Navigator安装使用指南
本文简要介绍如何下载安装Anaconda Navigator最新版,以及如何使用Python内核搭载来完成应用程序开发。
C#(去、过滤)掉字符中的换行符(\r\n) (实用)
参考:https://www.cnblogs.com/ShaYeBlog/p/5082874.html 本文介绍的方法需要先导入命名空间:usingSystem.Text.RegularExpressions; 字符串里所有的的换行符都去掉:textStr=Regex.Replace(textStr,@"[/n/r]",""); 去掉末尾的换行符:textStr=textStr...
新建菜单Office被替换为腾讯文档 - 解决方案
右键新建菜单中的Office被替换为腾讯文档。原因是安装了腾讯文档软件,此软件安装时会自动将新建菜单中的Office替换为腾讯文档,下文介绍解决方案。
解决Cursor AI工具地域限制报错的方法与原理
地理围栏(GEO-fencing)是现代云服务常用的访问控制技术,通过IP地址库匹配、支付系统验证等方式实现区域限制。在AI编程工具领域,这种技术常导致类似Cursor出现的'unsupported country region'报错。从技术实现看,服务商会综合HTTP头信息、时区设置等多维度数据进行地理位置判断。开发者可通过调整网络出口、配置本地模型或使用企业版等方案解决。本文以Cursor为例,详细分析了AI工具地域限制的底层原理,并提供了包括Ollama本地部署在内的多种工程实践方案,特别适合需要稳定
C# 字符串中去掉换行符、间隔符等特殊字符
C# 字符串中去掉换行符、间隔符等特殊字符 1.String.Replace方法 在C#中替换字符串中的字符我们可以使用String提供的Replace方法。 string s = "sdsd"; string ss = s + Environment.NewLine; var eeee = ss.Replace(Environment.NewLine, ""); var nes = ss.Repla
CPU核心、die和package的区别:从硬件小白到高手的进阶指南
本文深入浅出地解析了CPU核心、Die与Package的核心概念与区别,是硬件爱好者从入门到精通的实用指南。文章从硅晶圆制造讲起,阐述了物理核心与逻辑线程(如超线程技术)的工作原理,并详细介绍了封装(Package)的作用与多Die模块化设计。最后,结合实际应用场景,提供了选购、性能解读与优化调优的实用建议。
Python正则表达式实战:字符串精准清洗与字符类型提取指南
在数据处理与文本分析领域,字符串清洗与信息提取是基础且高频的操作。其核心原理在于利用正则表达式(Regex)定义字符集合的模式匹配规则,通过查找、替换或提取等操作,实现对文本数据的结构化处理。这项技术的核心价值在于能大幅提升数据预处理的自动化程度与准确性,避免繁琐的手工操作。在数据清洗、信息抽取、日志分析、自然语言处理预处理等场景中,正则表达式都是不可或缺的利器。本文聚焦于Python的`re`模块,深入解析如何针对数字、中文、英文等特定字符类型进行精准的‘保留’或‘去除’操作,并提供了可直接复用的函数库与
(王道408考研操作系统)第一章计算机系统概述-第三节2:中断和异常
注意!!! 本节内容和《计算机组成原理》中的中断有重合,如果需要详细了解的话可以点击链接跳转:(计算机组成原理)第七章输入和输出系统-第四节2:I/O方式之程序中断方式 为了内容完整,部分内容会借用上述文章 文章目录一:中断和异常的基本概念(1)中断和异常的定义 一:中断和异常的基本概念 在操作系统引入核心态和用户态这两种工作状态后,就需要考虑两种状态之间是如何切换的。 操作系统内核工作在核心态,用户程序工作在用户态,系统不允许用户程序使用核心态的功能,但是用户程序为了完成某些操作又必须使用这些功能
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
正则表达式小记
最近工作需要对诸如手机号码进行脱敏,正好巩固了一下正则表达式的使用,写下文章记录一下。 什么是正则表达式 引用一下MDN上面的注解: 正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。...
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
Ai-Agent学习历程—— 阶段3——RAG 与记忆机制
基于学习大纲我们有了一个简单的地图,从官网的资料进行对应,主要是以下三部分过程中可以进行参考官方文档,但有一些可能会基于目前最新的资料进行适当的更改,让我们愉快的开始吧!这里为您梳理第一节:ETL 数据智能清洗与高阶分块的学习地图。本节将带您攻克数据进入向量数据库之前的“清洗、结构化解析、智能切分与父子文档关联”全流程,彻底打牢 RAG 的数据地基。以现在大模型的发展来说,200K的上下文甚至接近300K的都有,几本书是不成问题的,那切片的意义又在哪?核心原因有三个:在 RAG 系统中,用户提问后,我们不能
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
StringUtils中isBlank()和isEmpty()的区别
【代码】StringUtils中isBlank()和isEmpty()的区别。
java接口和工具类区别,【深度精讲】JFinal中的Ret和Kv工具类的区别,你用对了吗?...
在JFinal中有两个类Map的工具类,一个是有状态的Ret,一个是无状态的Kv,各种自己的应用场景,你用对了吗?下面我们从多个方面来探究一下,JFinal针对这两个类的设计:一、位置-com.jfinal.kit包com.jfinal.kit包,JFinal里的核心工具类包,里面还有我们常用来判断和处理字符串用的StrKit工具类。加载读取配置文件用的PropKit工具类。用户密码Md5或者加盐...
java中stream流的常见使用,排序,过滤,筛选
java中stream流的常见使用,排序,过滤,筛选
Java 11 – String.isBlank()介绍
学习使用String.isBlank()方法确定给定的字符串是空白还是空或仅包含空格。isBlank()方法已添加到Java 11中。 要检查给定的字符串甚至没有空格,请使用String.isEmpty()方法。 isBlank()方法 如果给定的字符串为空或仅包含空格代码点,则此方法返回true,否则返回false。 它使用Character.isWhitespace(char)方法来确定空白字符。 /** * returns - true if the string...
Java类调用框架总结_JFinal4.3 框架总结(二)
6 模板引擎——Template6.1 表达式表达式与Java是直接打通!你也可以先无视这些用法,而是直接当成是 java 表达式去使用,则可以免除掉上面的学习成本。6.1.1 与java规则基本相同的表达式算术运算: + - * / % ++ --比较运算: > >= < <= == != (基本用法相同,后面会介绍增强部分)逻辑...
C#通用正则表达试,验证手机号,邮箱等等
C#一般通用正则
C#最新手机验证
验证手机号码正则:(^(01|1)[3,4,5,8][0-9])\d{8}$ 我自己已经测试过,下面是我的测试代码。 protected void VaildatePhoneNumber() { string msg = string.Empty; Regex reger = new Regex(@"(1[3,5,
Jfinal学习心得之验证码的几种实现方法
原文地址:https://www.hiai.top/archives/251.html 第一种方法: 在xxxControl 控制器下面新建返回验证码的方法: public void captcha() { renderCaptcha(); } 在前台页面中这样调用: <img title="点击刷新" class="captcha" src="/login/c...
StringUtis常用方法介绍,isBlank()方法
StringUtils常用的方法介绍 StringUtils工具类位于commons-lang-2.2.jar包中:org.apache.commons.lang.StringUtils ; 在校验一个String类型是否为空,存在三种情况 是否为NULL 是否为"" 是否为空字符串(引号之间有空格)如:" " 1、isBlank()方法 isBlank()方法可以一次性校验这三种情况。返回值都是true。源码如下: public static boolean isBlank(String str
1万+



被折叠的 条评论
为什么被折叠?



