txyd.util.StringUtils.java Source code

Java tutorial

Introduction

Here is the source code for txyd.util.StringUtils.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 txyd.util;

import java.io.UnsupportedEncodingException;
import java.util.Collection;

/**
 * Converts String to and from bytes using the encodings required by the Java specification. These encodings are specified in <a
 * href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
 *
 * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
 * @version $Id: StringUtils.java 801391 2009-08-05 19:55:54Z ggregory $
 * @see CharEncoding
 * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
 * @since 1.4
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils {

    /**
     * Encodes the given string into a sequence of bytes using the ISO-8859-1 charset, storing the result into a new
     * byte array.
     *
     * @param string the String to encode
     * @return encoded bytes
     * @throws IllegalStateException Thrown when the charset is missing, which should be never according the the Java specification.
     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
     * @see #getBytesUnchecked(String, String)
     */
    public static byte[] getBytesIso8859_1(String string) {
        return StringUtils.getBytesUnchecked(string, CharEncoding.ISO_8859_1);
    }

    /**
     * Encodes the given string into a sequence of bytes using the US-ASCII charset, storing the result into a new byte
     * array.
     *
     * @param string the String to encode
     * @return encoded bytes
     * @throws IllegalStateException Thrown when the charset is missing, which should be never according the the Java specification.
     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
     * @see #getBytesUnchecked(String, String)
     */
    public static byte[] getBytesUsAscii(String string) {
        return StringUtils.getBytesUnchecked(string, CharEncoding.US_ASCII);
    }

    /**
     * Encodes the given string into a sequence of bytes using the UTF-16 charset, storing the result into a new byte
     * array.
     *
     * @param string the String to encode
     * @return encoded bytes
     * @throws IllegalStateException Thrown when the charset is missing, which should be never according the the Java specification.
     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
     * @see #getBytesUnchecked(String, String)
     */
    public static byte[] getBytesUtf16(String string) {
        return StringUtils.getBytesUnchecked(string, CharEncoding.UTF_16);
    }

    /**
     * Encodes the given string into a sequence of bytes using the UTF-16BE charset, storing the result into a new byte
     * array.
     *
     * @param string the String to encode
     * @return encoded bytes
     * @throws IllegalStateException Thrown when the charset is missing, which should be never according the the Java specification.
     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
     * @see #getBytesUnchecked(String, String)
     */
    public static byte[] getBytesUtf16Be(String string) {
        return StringUtils.getBytesUnchecked(string, CharEncoding.UTF_16BE);
    }

    /**
     * Encodes the given string into a sequence of bytes using the UTF-16LE charset, storing the result into a new byte
     * array.
     *
     * @param string the String to encode
     * @return encoded bytes
     * @throws IllegalStateException Thrown when the charset is missing, which should be never according the the Java specification.
     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
     * @see #getBytesUnchecked(String, String)
     */
    public static byte[] getBytesUtf16Le(String string) {
        return StringUtils.getBytesUnchecked(string, CharEncoding.UTF_16LE);
    }

    /**
     * Encodes the given string into a sequence of bytes using the UTF-8 charset, storing the result into a new byte
     * array.
     *
     * @param string the String to encode
     * @return encoded bytes
     * @throws IllegalStateException Thrown when the charset is missing, which should be never according the the Java specification.
     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
     * @see #getBytesUnchecked(String, String)
     */
    public static byte[] getBytesUtf8(String string) {
        return StringUtils.getBytesUnchecked(string, CharEncoding.UTF_8);
    }

    /**
     * Encodes the given string into a sequence of bytes using the named charset, storing the result into a new byte
     * array.
     * <p>
     * This method catches {@link UnsupportedEncodingException} and rethrows it as {@link IllegalStateException}, which
     * should never happen for a required charset name. Use this method when the encoding is required to be in the JRE.
     * </p>
     *
     * @param string      the String to encode
     * @param charsetName The name of a required {@link java.nio.charset.Charset}
     * @return encoded bytes
     * @throws IllegalStateException Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen for a
     *                               required charset name.
     * @see CharEncoding
     * @see String#getBytes(String)
     */
    public static byte[] getBytesUnchecked(String string, String charsetName) {
        if (string == null) {
            return null;
        }
        try {
            return string.getBytes(charsetName);
        } catch (UnsupportedEncodingException e) {
            throw StringUtils.newIllegalStateException(charsetName, e);
        }
    }

    private static IllegalStateException newIllegalStateException(String charsetName,
            UnsupportedEncodingException e) {
        return new IllegalStateException(charsetName + ": " + e);
    }

    /**
     * Constructs a new <code>String</code> by decoding the specified array of bytes using the given charset.
     * <p>
     * This method catches {@link UnsupportedEncodingException} and re-throws it as {@link IllegalStateException}, which
     * should never happen for a required charset name. Use this method when the encoding is required to be in the JRE.
     * </p>
     *
     * @param bytes       The bytes to be decoded into characters
     * @param charsetName The name of a required {@link java.nio.charset.Charset}
     * @return A new <code>String</code> decoded from the specified array of bytes using the given charset.
     * @throws IllegalStateException Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen for a
     *                               required charset name.
     * @see CharEncoding
     * @see String#String(byte[], String)
     */
    public static String newString(byte[] bytes, String charsetName) {
        if (bytes == null) {
            return null;
        }
        try {
            return new String(bytes, charsetName);
        } catch (UnsupportedEncodingException e) {
            throw StringUtils.newIllegalStateException(charsetName, e);
        }
    }

    /**
     * Constructs a new <code>String</code> by decoding the specified array of bytes using the ISO-8859-1 charset.
     *
     * @param bytes The bytes to be decoded into characters
     * @return A new <code>String</code> decoded from the specified array of bytes using the given charset.
     * @throws IllegalStateException Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen since the
     *                               charset is required.
     */
    public static String newStringIso8859_1(byte[] bytes) {
        return StringUtils.newString(bytes, CharEncoding.ISO_8859_1);
    }

    /**
     * Constructs a new <code>String</code> by decoding the specified array of bytes using the US-ASCII charset.
     *
     * @param bytes The bytes to be decoded into characters
     * @return A new <code>String</code> decoded from the specified array of bytes using the given charset.
     * @throws IllegalStateException Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen since the
     *                               charset is required.
     */
    public static String newStringUsAscii(byte[] bytes) {
        return StringUtils.newString(bytes, CharEncoding.US_ASCII);
    }

    /**
     * Constructs a new <code>String</code> by decoding the specified array of bytes using the UTF-16 charset.
     *
     * @param bytes The bytes to be decoded into characters
     * @return A new <code>String</code> decoded from the specified array of bytes using the given charset.
     * @throws IllegalStateException Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen since the
     *                               charset is required.
     */
    public static String newStringUtf16(byte[] bytes) {
        return StringUtils.newString(bytes, CharEncoding.UTF_16);
    }

    /**
     * Constructs a new <code>String</code> by decoding the specified array of bytes using the UTF-16BE charset.
     *
     * @param bytes The bytes to be decoded into characters
     * @return A new <code>String</code> decoded from the specified array of bytes using the given charset.
     * @throws IllegalStateException Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen since the
     *                               charset is required.
     */
    public static String newStringUtf16Be(byte[] bytes) {
        return StringUtils.newString(bytes, CharEncoding.UTF_16BE);
    }

    /**
     * Constructs a new <code>String</code> by decoding the specified array of bytes using the UTF-16LE charset.
     *
     * @param bytes The bytes to be decoded into characters
     * @return A new <code>String</code> decoded from the specified array of bytes using the given charset.
     * @throws IllegalStateException Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen since the
     *                               charset is required.
     */
    public static String newStringUtf16Le(byte[] bytes) {
        return StringUtils.newString(bytes, CharEncoding.UTF_16LE);
    }

    /**
     * Constructs a new <code>String</code> by decoding the specified array of bytes using the UTF-8 charset.
     *
     * @param bytes The bytes to be decoded into characters
     * @return A new <code>String</code> decoded from the specified array of bytes using the given charset.
     * @throws IllegalStateException Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen since the
     *                               charset is required.
     */
    public static String newStringUtf8(byte[] bytes) {
        return StringUtils.newString(bytes, CharEncoding.UTF_8);
    }

    /**
     * ?
     *
     * @param parms
     * @return
     */
    public static boolean isBlankOrEmpty(String parms) {
        return StringUtils.isBlank(parms) || StringUtils.isEmpty(parms);
    }

    /**
     * ?blank
     * StringUtils.isBlank(null)      = true
     * StringUtils.isBlank("")        = true
     * StringUtils.isBlank(" ")       = true
     * StringUtils.isBlank("bob")     = false
     * StringUtils.isBlank("  bob  ") = false
     *
     * @param str
     * @return
     */
    public static boolean isBlank(String str) {
        int strLen;
        if (str == null || (strLen = str.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if ((Character.isWhitespace(str.charAt(i)) == false)) {
                return false;
            }
        }
        return true;
    }

    /**
     * ?empty
     * StringUtils.isEmpty(null)      = true
     * StringUtils.isEmpty("")        = true
     * StringUtils.isEmpty(" ")       = false
     * StringUtils.isEmpty("bob")     = false
     * StringUtils.isEmpty("  bob  ") = false
     *
     * @param str
     * @return
     */
    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }

    /**
     * ?
     *
     * @param str
     * @return
     */
    public static String encodeStr(String str) {
        try {
            return new String(str.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }
    //    /**
    //     * ?
    //     * @param parms
    //     * @return
    //     */
    //    public static boolean isInteger(String str) {
    //        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
    //        return pattern.matcher(str).matches();
    //    }

    /**
     * ?
     *
     * @param str
     * @return
     */
    public static boolean isInteger(String str) {
        try {
            Integer.valueOf(str.trim());
        } catch (Throwable throwable) {
            return false;
        }
        return true;
    }

    /**
     * ?
     *
     * @param str
     * @return
     */
    public static boolean isLong(String str) {
        try {
            Long.valueOf(str.trim());
        } catch (Throwable throwable) {
            return false;
        }
        return true;
    }

    /**
     * Integer
     *
     * @param str
     * @return
     */
    public static Integer getInteger(String str) {
        Integer result = null;
        try {
            result = Integer.valueOf(str.trim());
        } catch (Throwable throwable) {
        }
        return result;
    }

    /**
     * Long
     *
     * @param str
     * @return
     */
    public static Long getLong(String str) {
        Long result = null;
        try {
            result = Long.valueOf(str.trim());
        } catch (Throwable throwable) {
        }
        return result;
    }

    /**
     * ?
     *
     * @param cs
     * @param separator
     * @return
     */
    public static String getStrByCollectionAndSeparator(final Collection<?> cs, final String separator) {
        if (cs == null || cs.size() == 0) {
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (Object item : cs) {
            stringBuilder.append(item.toString() + separator);
        }
        return stringBuilder.substring(0, stringBuilder.lastIndexOf(separator)).toString();
    }

    /**
     * ?
     *
     * @param cs
     * @param separator
     * @return
     */
    public static <T> String getStrByArrayAndSeparator(T[] cs, final String separator) {
        if (cs == null || cs.length == 0) {
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (Object item : cs) {
            stringBuilder.append(item.toString() + separator);
        }
        return stringBuilder.substring(0, stringBuilder.lastIndexOf(separator)).toString();
    }

    /**
     * ??2?
     *
     * @param value 
     * @return 
     */
    public static int length(String value) {
        int valueLength = 0;
        String chinese = "[\u0391-\uFFE5]";
        /* ???2?1 */
        for (int i = 0; i < value.length(); i++) {
            /* ? */
            String temp = value.substring(i, i + 1);
            /* ? */
            if (temp.matches(chinese)) {
                /* 2 */
                valueLength += 2;
            } else {
                /* 1 */
                valueLength += 1;
            }
        }
        return valueLength;
    }

    /**
     * null
     * ?strtrim?
     * @param str
     * @return
     */
    public static String nullToEmptyAndTrim(String str) {
        return str == null ? "" : str.trim();
    }

    /**
     * ?????
     * charjavachar16????16???????
     * <p>
     * ??U+0000U+10FFFFU+0000U+FFFFU+10000U+10FFFF
     * <p>
     * ????1216??UTF-16
     * ??????????U+D800U+DFFF
     * ???????
     *
     * @param sentence
     */
    public static void printlnChar(String sentence) {
        //        String sentence = "\u03C0\uD835\uDD6B";//?
        //        String sentence = "";
        int lengthU = sentence.length();
        int lengthP = sentence.codePointCount(0, lengthU);
        //      System.out.println(lengthU);        // ??
        //      System.out.println(lengthP);        // ???
        if (lengthU != lengthP) {//
            for (int i = 0; i < lengthU; i++) {
                int codePoint = sentence.codePointAt(i);
                if (Character.isSupplementaryCodePoint(codePoint)) {
                    System.out.println(String.valueOf(Character.toChars(codePoint)));
                    i++;
                } else {
                    System.out.println(sentence.charAt(i));
                }
            }
        }
    }

    /**
     * 
     *
     * @param string
     * @return
     */
    public static String leftTrim(String string) {
        if (string == null) {
            return "";
        }
        return string.replaceFirst("^\\s+", "");
    }

    /**
     * ?
     *
     * @param string
     * @return
     */
    public static String rightTrim(String string) {
        if (string == null) {
            return "";
        }
        return string.replaceFirst("\\s+$", "");
    }

    /**
     * @param string
     * @return
     * @Description ?
     * @author
     */
    public static String toUpperCaseOfFirstChar(String string) {
        if (string == null || string.trim().equals("")) {
            return "";
        } else {
            string = string.trim();
            String firstChar = string.substring(0, 1).toUpperCase();
            string = firstChar + string.substring(1);
        }
        return string;
    }

    public static void main(String[] args) {
        System.out.println(5 % 5);
        System.out.println(isLong("1111111111111111111111"));
        StringBuilder sb = new StringBuilder("1_2_3_4_5_");
        System.out.println(sb.substring(0, sb.lastIndexOf("_")));
    }
}