`
mjs123
  • 浏览: 35264 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

String Tools类

阅读更多

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类答案解析.md

    Educoder题目:Java面向对象 - String类答案解析

    Android String Tool(Android工程的字串工具)

    1)扫描Android工程中所有的指定语言的字串资源(xml文件)并生成字串表stringTable.xls 2)修改字串表stringTable.xls后,可以生成xml文件放在./out/Project目录中,并且保持改资源文件在原始工程中的目录结构。 3...

    string tools – python(最新可编辑文档).doc

    例如,`re.search(pattern, string)`查找字符串中匹配模式的第一个实例,`re.sub(pattern, repl, string)`则用于替换所有匹配项。 5. **编码与解码** Python 3默认使用UTF-8编码,可以使用`str.encode()`将字符串...

    geotools稳定版本geotools-19.4-bin.zip

    public static void main(String[] args) throws Exception { // display a data store file chooser dialog for shapefiles File file = JFileDataStoreChooser.showOpenFile&#40;"shp", null&#41;; if (file =...

    geotools读取shp文件及shp文件操作工具类代码.pdf

    GeoTools 读取 SHP 文件及 SHP 文件操作工具类代码解析 GeoTools 是一个开放源代码的 Java 库,用于处理地理信息系统(GIS)数据。SHp 文件是 GIS 中的一种常见文件格式,用于存储地理空间数据。本文将对 GeoTools ...

    parquet-tools.jar

    -h,--help Show this help string -j,--json Show records in JSON format. --no-color Disable color output even if supported where &lt;input&gt; is the parquet file to print to stdout usage: parquet-tools ...

    serial-string-receiver-tools.zip_serial串口接收_string receiver_串口通信

    这个“serial-string-receiver-tools.zip”压缩包提供了一组串口字符串接收工具,对于进行串行通信的开发和调试非常有帮助。以下是对这些知识点的详细解释: 1. **串口通信(Serial Communication)**:串口通信是...

    sql语句转string

    在提供的`sqltools.html`文件中,可能包含了关于如何使用特定工具或库进行此转换的更多信息,例如介绍如何使用某些Java库(如Apache Commons Lang或StringBuilder)更高效地构建SQL字符串,或者分享最佳实践和避免...

    项目构建公共类tools

    在Java开发过程中,"项目构建公共类tools"通常是指一组被多个模块或项目共享的工具类,它们封装了一些常见的、通用的功能,以提高代码的复用性和开发效率。这些工具类可能涵盖各种领域,如文件操作、日期时间处理、...

    geotools系列2-读取postgis

    Map&lt;String, Object&gt; params = DataStoreFinder.getDataStoreParams(propertiesFile); DataStore dataStore = DataStoreFinder.getDataStore(params); ``` 4. **定义查询**:使用`Query`对象来指定要从数据库中...

    geotools读取*dbf/*shp文件

    Geotools提供`org.geotools.data.shapefile.ShapefileDataStore`类来读取SHP文件。创建一个DataStore对象,然后通过它获取FeatureSource,进一步获取FeatureCollection,这样就可以遍历和访问Shapefile中的几何对象...

    jar包itcast-tools-1.4.2.jar

    itcast-tools-1.4.2.jar的使用方法通常包括将其添加到项目的类路径中,然后通过import导入相应的类或方法。例如,开发者可以这样使用UUID生成器: ```java import com.itcast.utils.UUIDUtil; public class Test {...

    string-tools:一些有用的函数来处理字符串

    ⇒ string ⇒ string ⇒ string ⇒ string符号一些跨平台符号( tick和cross ) 类型: 静态属性 s.escapeRegExp() 转义特殊的正则表达式字符类型: string-tools静态方法例子&gt; s . escapeRegExp ( "(.*)" ) ;'\\...

    yujianbo-java-tools-7.7.0.zip

    yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括配置properties后, 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码...

    Open Ftp SSH Tools

    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, ...

    yujianbo-java-tools-8.2.0.jar

    1、将SwingService修改为内部静态类的方式,把comp,chart,tools,包括进去 2、优化了SysMathService的内部静态类 3、在SysMathService中增加了获取指定个数和范围的随机数的方法 yujianbo-java-tools.jar是本人...

    use-geotools.zip

    它提供了丰富的接口和类,能够处理各种地理空间数据格式,包括 Shapefile。在本项目中,我们利用 Gradle 这个现代的构建工具来管理依赖并集成 GeoTools,以便于生成 Shapefile 文件。 首先,我们需要在项目的 `...

    yujianbo-java-tools-7.8.0.jar

    yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...

    C#之Common工具类

    在C#中,我们可以创建一个名为"CommonTools"的工具类,将这些常用的方法封装其中,以方便在项目中调用。 例如,我们可以定义一个用于字符串操作的方法: ```csharp public static class CommonTools { public ...

Global site tag (gtag.js) - Google Analytics