All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alibaba.toolkit.util.StringUtil Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2002-2012 Alibaba Group Holding Limited.
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.toolkit.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.StringTokenizer;

/**
 * 和字符串有关的小工具.
 *
 * @author Michael Zhou
 * @version $Id: StringUtil.java,v 1.1 2003/07/03 07:26:15 baobao Exp $
 */
public class StringUtil {
    private static final OutputStream DUMMY_OUTPUT_STREAM = new ByteArrayOutputStream(0);
    private static final String       SYSTEM_CHARSET      = new OutputStreamWriter(DUMMY_OUTPUT_STREAM).getEncoding();

    /*
     * ==========================================================================
     * ==
     */
    /* 以下是有关resource bundle的方法 */
    /*
     * ==========================================================================
     * ==
     */

    /**
     * 使用MessageFormat格式化字符串.
     *
     * @param bundle resource bundle
     * @param key    要查找的键
     * @param params 参数表
     * @return key对应的字符串
     * @throws NullPointerException     resource key为null或resource
     *                                  bundle为null
     * @throws MissingResourceException 指定resource key未找到
     */
    public static String getMessage(ResourceBundle bundle, Object key, Object[] params) {
        String pattern = bundle.getString(key.toString());

        if (params == null || params.length == 0) {
            return pattern;
        }

        return MessageFormat.format(pattern, params);
    }

    /**
     * 使用MessageFormat格式化字符串.
     *
     * @param bundle resource bundle
     * @param key    要查找的键
     * @param param1 参数1
     * @return key对应的字符串
     * @throws NullPointerException     resource key为null或resource
     *                                  bundle为null
     * @throws MissingResourceException 指定resource key未找到
     */
    public static String getMessage(ResourceBundle bundle, Object key, Object param1) {
        return getMessage(bundle, key, new Object[] { param1 });
    }

    /**
     * 使用MessageFormat格式化字符串.
     *
     * @param bundle resource bundle
     * @param key    要查找的键
     * @param param1 参数1
     * @param param2 参数2
     * @return key对应的字符串
     * @throws NullPointerException     resource key为null或resource
     *                                  bundle为null
     * @throws MissingResourceException 指定resource key未找到
     */
    public static String getMessage(ResourceBundle bundle, Object key, Object param1, Object param2) {
        return getMessage(bundle, key, new Object[] { param1, param2 });
    }

    /**
     * 使用MessageFormat格式化字符串.
     *
     * @param bundle resource bundle
     * @param key    要查找的键
     * @param param1 参数1
     * @param param2 参数2
     * @param param3 参数3
     * @return key对应的字符串
     * @throws NullPointerException     resource key为null或resource
     *                                  bundle为null
     * @throws MissingResourceException 指定resource key未找到
     */
    public static String getMessage(ResourceBundle bundle, Object key, Object param1, Object param2, Object param3) {
        return getMessage(bundle, key, new Object[] { param1, param2, param3 });
    }

    /**
     * 使用MessageFormat格式化字符串.
     *
     * @param bundle resource bundle
     * @param key    要查找的键
     * @param param1 参数1
     * @param param2 参数2
     * @param param3 参数3
     * @param param4 参数4
     * @return key对应的字符串
     * @throws NullPointerException     resource key为null或resource
     *                                  bundle为null
     * @throws MissingResourceException 指定resource key未找到
     */
    public static String getMessage(ResourceBundle bundle, Object key, Object param1, Object param2, Object param3,
                                    Object param4) {
        return getMessage(bundle, key, new Object[] { param1, param2, param3, param4 });
    }

    /**
     * 使用MessageFormat格式化字符串.
     *
     * @param bundle resource bundle
     * @param key    要查找的键
     * @param param1 参数1
     * @param param2 参数2
     * @param param3 参数3
     * @param param4 参数4
     * @param param5 参数5
     * @return key对应的字符串
     * @throws NullPointerException     resource key为null或resource
     *                                  bundle为null
     * @throws MissingResourceException 指定resource key未找到
     */
    public static String getMessage(ResourceBundle bundle, Object key, Object param1, Object param2, Object param3,
                                    Object param4, Object param5) {
        return getMessage(bundle, key, new Object[] { param1, param2, param3, param4, param5 });
    }

    /**
     * 检查字符串是否为null或空字符串.
     *
     * @param str 要检查的字符串
     * @return 如果为空, 则返回true
     */
    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }

    /**
     * 取得系统字符集名称.
     *
     * @return 系统字符集名称
     */
    public static String getSystemCharset() {
        return SYSTEM_CHARSET;
    }

    /**
     * 取得正规的字符集名称, 如果指定字符集不存在, 则抛出UnsupportedEncodingException.
     *
     * @param charset 字符集名称
     * @return 正规的字符集名称
     * @throws UnsupportedEncodingException 如果指定字符集不存在
     */
    public static String getCanonicalCharset(String charset) throws UnsupportedEncodingException {
        return new OutputStreamWriter(DUMMY_OUTPUT_STREAM, charset).getEncoding();
    }

    /**
     * 取得正规的字符集名称, 如果指定字符集不存在, 则返回null.
     *
     * @param charset 字符集名称
     * @return 正规的字符集名称, 如果指定字符集不存在, 则返回null
     */
    public static String getCanonicalCharsetQuiet(String charset) {
        try {
            return getCanonicalCharset(charset);
        } catch (UnsupportedEncodingException e) {
            return null;
        }
    }

    /**
     * 展开字符串, 将"${"和"}"中的变量转换成System.getProperties()中的值.
     *
     * @param value 要转换的值
     * @return 展开后的值
     */
    public static String expendProperty(String value) {
        return expendProperty(value, System.getProperties());
    }

    /**
     * 展开字符串, 将"${"和"}"中的变量转换成指定properties中的值.
     *
     * @param value      要转换的值
     * @param properties 可用的变量
     * @return 展开后的值
     */
    public static String expendProperty(String value, Map properties) {
        if (value == null) {
            return null;
        }

        int i = value.indexOf("${", 0);

        if (i == -1) {
            return value;
        }

        StringBuffer buffer = new StringBuffer(value.length());
        int length = value.length();
        int j = 0;

        while (i < length) {
            if (i > j) {
                buffer.append(value.substring(j, i));
                j = i;
            }

            int k;

            for (k = i + 2; k < length && value.charAt(k) != '}'; k++) {
            }

            if (k == length) {
                buffer.append(value.substring(i, k));
                break;
            }

            String propertyName = value.substring(i + 2, k);

            if (propertyName.equals("/")) {
                buffer.append(File.separatorChar);
            } else {
                Object propertyValue = properties.get(propertyName);

                if (propertyValue != null) {
                    buffer.append(propertyValue);
                } else {
                    buffer.append("${").append(propertyName).append("}");
                }
            }

            j = k + 1;
            i = value.indexOf("${", j);

            if (i == -1) {
                if (j < length) {
                    buffer.append(value.substring(j, length));
                }

                break;
            }
        }

        return buffer.toString();
    }

    // add by roy

    /**
     * 根据分割符分割字符串。 Return List,after split Split a String by a splitter(such as
     * ",","hai",...)
     *
     * @param sStr      将要被分割的字符串。
     * @param sSplitter 分割符。
     * @return 一个含有分割好的字符串的List。如果分割失败将返回null,如果字符串中没有包含指定的分割符,
     *         将返回只有一个元素的字符串数组,这个元素就是该字符串本身。如果这个字符串只含有分割符,将返回null。
     */
    public static List splitStr(String sStr, String sSplitter) {
        if (sStr == null || sStr.length() <= 0 || sSplitter == null || sSplitter.length() <= 0) {
            return null;
        }

        StringTokenizer st = new StringTokenizer(sStr, sSplitter);
        List result = new ArrayList();

        while (st.hasMoreTokens()) {
            result.add(st.nextToken().trim());
        }

        return result;
    }

    // add by roy

    /**
     * 检验一个String是否是一个数字(例如:7897897->true,789t67 -> false)。
     * 注意:如果是一个负数,将会返回false. Return true if the string represents a number
     *
     * @param str 你想校验的字符串。
     * @return 如果是一个标准的数字,将返回true,否则返回false。
     */
    public static boolean isNum(String str) {
        if (str == null || str.length() <= 0) {
            return false;
        }

        char[] ch = str.toCharArray();

        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(ch[i])) {
                return false;
            }
        }

        return true;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy