import java.text.Collator;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Random;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* <p>字符串处理通用工具类</p>
* 字符串空串处理、随机串生成等.
* @author zz
*/
public final class StringTools
{
// 随机串缺省长度:
private static final int LEN = 6;
// 随机串码表:ASCII_NUMERIC、ASCII_ALPHA(UPPER/LOWER)
private static final char[] ASCII_NUMERIC = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
// 随机对象:
private static final Random RANDOM = new Random();
// Locale 参数顺序
private static final int LANGUAGE = 0;
private static final int COUNTRY = 1;
private static final int VARIANT = 2;
private static final int DEFAULT_LENGTH = 50;
/**
* <默认构造函数>
*/
private StringTools()
{
}
/**
* <p>字符串判空</p>
* 判断一个对象是否为“空串”.
* @param val 要判断的对象.
* @return true “空串”, false 非空或不是字符串.
*/
public static boolean isNullOrNone(Object val)
{
if (null == val)
{
return true;
}
if (val.getClass() == String.class && "".equals(val))
{
return true;
}
return false;
}
/**
* <p>字符串比较</p>
* 比较两个字符串是否相等,都为null时,认为相等.
* @param val1 字符串1
* @param val2 字符串2
* @return true 两字符串相等(或都为null) false 两字符串不相等.
*/
public static boolean isEquals(String val1, String val2)
{
if (null == val1 && null == val2)
{
return true;
}
if (val1 != null && val2 != null)
{
Collator c = Collator.getInstance();
if (c.compare(val1, val2) == 0)
{
return true;
}
}
return false;
}
/**
* <p>获取从页面传递参数信息</p>
* 将页面中传入的对象属性值解析成key:value形式放入map中,供外部使用。适用于struts2
* 页面传入的对象必须覆盖toString()方法,且格式必须为:
* prop:value;prop:value;prop:value
* @param key 参数键值.
* @param map 被搜索的Map结构.
* @return 页面参数Map对象.
*/
public static Map<String, String> getPropMap(String key, Map<String, String[]> map)
{
String[] strArr = map.get(key);
if (isNullOrNone(strArr) || 0 == strArr.length)
{
return new HashMap<String, String>(0);
}
strArr = strArr[0].split(";");
int length = strArr.length;
String tempKey = "";
String tempVal = "";
String[] tempArr = null;
Map<String, String> tempMap = new HashMap<String, String>();
for (int i = 0; i < length; i++)
{
tempArr = strArr[i].split(":");
tempKey = String.valueOf(tempArr[0]).trim();
tempVal = String.valueOf(tempArr[1]).trim();
tempMap.put(tempKey, tempVal);
}
return tempMap;
}
/**
* <p>获取从页面传递参数信息</p>
* 获取从页面传递的String类型的参数信息,适用于struts2
* @param key 键.
* @param map 被搜索的Map结构.
* @return 参数字符串值.
*/
public static String getStringParam(String key, Map<String, String[]> map)
{
String[] strArr = map.get(key);
if (isNullOrNone(strArr) || 0 == strArr.length)
{
return "";
}
return strArr[0];
}
/**
* <p>获取从页面传递参数信息</p>
* 获取从页面传递的String类型的参数信息,适用于struts2
* @param key 键.
* @param map 被搜索的Map结构.
* @return 参数布尔值.
*/
public static boolean getBooleanParam(String key, Map<String, String[]> map)
{
String[] strArr = map.get(key);
if (isNullOrNone(strArr) || 0 == strArr.length)
{
return false;
}
return Boolean.parseBoolean(strArr[0]);
}
/**
* <p>获取从页面传递参数信息</p>
* 获取从页面传递的String类型的参数信息,适用于struts2
* @param key 键.
* @param map 被搜索的Map结构.
* @return 参数整型值.
*
*/
public static int getIntParam(String key, Map<String, String[]> map)
{
String[] strArr = map.get(key);
if (isNullOrNone(strArr) || 0 == strArr.length)
{
return -1;
}
return Integer.parseInt(strArr[0]);
}
/**
* <p>字符串分割</p>
* 将字符串分割成字符串数组, 类似toCharArray方法.
* @param input 被分的字符串.
* @return 分成的字符串数组.
*/
public static String[] toStringArray(String input)
{
if (isNullOrNone(input))
{
return new String[0];
}
int length = input.length();
String[] strArr = new String[length];
for (int i = 0; i < length; i++)
{
strArr[i] = String.valueOf(input.charAt(i));
}
return strArr;
}
/**
* <p>字符串合成</p>
* 将字符串数组转换成字符串.
* @param item 字符串数组.
* @return 合成后的字符串.
*/
public static String arrayToString(String[] item)
{
if (item == null || item.length == 0)
{
return "";
}
StringBuffer msg = new StringBuffer();
for (int i = 0; i < item.length; i++)
{
msg.append(item[i]);
}
return msg.toString();
}
/**
* 获取随机串.
* 获取缺省长度的随机数字串,首字符可以为'0'.
* @author zhangtao(42373)
* @return 缺省长度(6)数字串.
*/
public static String getRandomNum()
{
return getRandomNum(LEN);
}
/**
* 获取随机串.
* 获取指定长度的随机数字串,首字符可以为'0'.
* @author zhangtao(42373)
* @param len 指定字符串中字符个数.
* @return 定长数字串.
*/
public static String getRandomNum(int len)
{
StringBuffer sb = new StringBuffer(len);
int max = ASCII_NUMERIC.length;
for (int i = 0; i < len; i++)
{
sb.append(ASCII_NUMERIC[RANDOM.nextInt(max)]);
}
return sb.toString();
}
/**
* 去掉电话号码中的"<"前内容,">"后内容
* 例如:Tom<13800000020> 返回13800000020
* @author liuqian
* @param uiMobile 显示的电话号码
* @return String 返回没有<>格式的电话号码
*/
public static String getUiMobile(String uiMobile)
{
if (isNullOrNone(uiMobile))
{
return "";
}
int start = uiMobile.indexOf('<');
int end = uiMobile.indexOf('>');
if (start > -1 && end > -1 && end > start)
{
return uiMobile.substring(start + 1, end);
}
return uiMobile;
}
/**
* 是否包含非ASCII字符
* @param msg 待校验的字符串
* @return true 包含, false 不包含
*/
public static boolean isContainUnicode(String msg)
{
for (int i = 0; i < msg.length(); i++)
{
Character c = msg.charAt(i);
Character.UnicodeBlock blk = Character.UnicodeBlock.of(c);
if (blk != Character.UnicodeBlock.BASIC_LATIN)
{
return true;
}
}
return false;
}
/**
* 根据字符串生成Locale
* 根据数据库中表示语言信息的Locale字符串,如zh_CN来生成对应的Locale对象
* @author zhangtao(42373)
* @param locale 表示Locale的字符串,如zh_CN
* @return Locale 对象
* @see java.util.Locale
*/
public static Locale getLocale(String locale)
{
String[] parts = {"", "", ""};
String[] tmp = locale.split("_");
System.arraycopy(tmp, 0, parts, 0, Math.min(tmp.length, parts.length));
return new Locale(parts[LANGUAGE], parts[COUNTRY], parts[VARIANT]);
}
/**
* 处理通用参数是否为数值
* @param parameter 参数
* @return boolean 匹配 true 不匹配 false
*/
public static boolean isNumber(String parameter)
{
if (null == parameter)
{
return false;
}
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(parameter);
return m.matches();
}
/**
* 处理通用参数是否为符合规则的字符串
* @param parameter 参数
* @param regex 匹配的字符串规则
* @return true 表示匹配 false 不匹配
*/
public static boolean isValidStringAllow(String parameter, String regex)
{
if (null == parameter || "".equals(parameter))
{
return false;
}
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(parameter);
return m.find();
}
/**
* 由于字符串太长,需要截取一定的长度,默认为50
* @param str 需要被截取的字符串
* @return String [返回类型说明]
* @see [类、类#方法、类#成员]
*/
public static String getStrByDefLength(String str)
{
if (isNullOrNone(str) || str.length() <= DEFAULT_LENGTH)
{
return str;
}
else
{
return str.substring(0, DEFAULT_LENGTH) + "......";
}
}
/**
* 将本地时间格式化为UTC时间
* @param timeFormat 时间格式
* @return newtime 转换后的时间
* @see [类、类#方法、类#成员]
*/
public static String getUTCtime(String timeFormat)
{
Calendar cal = Calendar.getInstance();
SimpleDateFormat sFormat = new SimpleDateFormat(timeFormat);//时间格式:yyyy-MM-dd HH:mm:ss
TimeZone zone = TimeZone.getTimeZone("GMT");
sFormat.setTimeZone(zone);
String newtime = sFormat.format(cal.getTime());
return newtime;
}
}
分享到:
相关推荐
Educoder题目:Java面向对象 - String类答案解析
1)扫描Android工程中所有的指定语言的字串资源(xml文件)并生成字串表stringTable.xls 2)修改字串表stringTable.xls后,可以生成xml文件放在./out/Project目录中,并且保持改资源文件在原始工程中的目录结构。 3...
例如,`re.search(pattern, string)`查找字符串中匹配模式的第一个实例,`re.sub(pattern, repl, string)`则用于替换所有匹配项。 5. **编码与解码** Python 3默认使用UTF-8编码,可以使用`str.encode()`将字符串...
public static void main(String[] args) throws Exception { // display a data store file chooser dialog for shapefiles File file = JFileDataStoreChooser.showOpenFile("shp", null); if (file =...
GeoTools 读取 SHP 文件及 SHP 文件操作工具类代码解析 GeoTools 是一个开放源代码的 Java 库,用于处理地理信息系统(GIS)数据。SHp 文件是 GIS 中的一种常见文件格式,用于存储地理空间数据。本文将对 GeoTools ...
-h,--help Show this help string -j,--json Show records in JSON format. --no-color Disable color output even if supported where <input> is the parquet file to print to stdout usage: parquet-tools ...
这个“serial-string-receiver-tools.zip”压缩包提供了一组串口字符串接收工具,对于进行串行通信的开发和调试非常有帮助。以下是对这些知识点的详细解释: 1. **串口通信(Serial Communication)**:串口通信是...
在提供的`sqltools.html`文件中,可能包含了关于如何使用特定工具或库进行此转换的更多信息,例如介绍如何使用某些Java库(如Apache Commons Lang或StringBuilder)更高效地构建SQL字符串,或者分享最佳实践和避免...
在Java开发过程中,"项目构建公共类tools"通常是指一组被多个模块或项目共享的工具类,它们封装了一些常见的、通用的功能,以提高代码的复用性和开发效率。这些工具类可能涵盖各种领域,如文件操作、日期时间处理、...
Map<String, Object> params = DataStoreFinder.getDataStoreParams(propertiesFile); DataStore dataStore = DataStoreFinder.getDataStore(params); ``` 4. **定义查询**:使用`Query`对象来指定要从数据库中...
Geotools提供`org.geotools.data.shapefile.ShapefileDataStore`类来读取SHP文件。创建一个DataStore对象,然后通过它获取FeatureSource,进一步获取FeatureCollection,这样就可以遍历和访问Shapefile中的几何对象...
itcast-tools-1.4.2.jar的使用方法通常包括将其添加到项目的类路径中,然后通过import导入相应的类或方法。例如,开发者可以这样使用UUID生成器: ```java import com.itcast.utils.UUIDUtil; public class Test {...
⇒ string ⇒ string ⇒ string ⇒ string符号一些跨平台符号( tick和cross ) 类型: 静态属性 s.escapeRegExp() 转义特殊的正则表达式字符类型: string-tools静态方法例子> s . escapeRegExp ( "(.*)" ) ;'\\...
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括配置properties后, 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码...
Public Function Upload(ByVal localPath As String, ByVal remotePath As String) As String Try If (m_sshCp.Connected = False) Then m_sshCp.Connect(10022) End If Try m_sshCp.Put_resume(localPath, ...
1、将SwingService修改为内部静态类的方式,把comp,chart,tools,包括进去 2、优化了SysMathService的内部静态类 3、在SysMathService中增加了获取指定个数和范围的随机数的方法 yujianbo-java-tools.jar是本人...
它提供了丰富的接口和类,能够处理各种地理空间数据格式,包括 Shapefile。在本项目中,我们利用 Gradle 这个现代的构建工具来管理依赖并集成 GeoTools,以便于生成 Shapefile 文件。 首先,我们需要在项目的 `...
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
在C#中,我们可以创建一个名为"CommonTools"的工具类,将这些常用的方法封装其中,以方便在项目中调用。 例如,我们可以定义一个用于字符串操作的方法: ```csharp public static class CommonTools { public ...