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

net.dongliu.commons.Strings Maven / Gradle / Ivy

There is a newer version: 6.7.0
Show newest version
package net.dongliu.commons;

import javax.annotation.Nullable;

/**
 * Utils for String
 */
public class Strings {


    /**
     * Return  empty str for null str
     */
    public static String nullToEmpty(@Nullable String str) {
        return str == null ? "" : str;
    }

    /**
     * Get sub string between two str.
     */
    public static String between(String str, String startStr, String endStr) {
        int start = str.indexOf(startStr);
        if (start == -1) {
            return "";
        }
        start += startStr.length();
        int end = str.indexOf(endStr, start);
        if (end == -1) {
            return "";
        }
        return str.substring(start, end);
    }

    public static String before(String str, String substr) {
        if (str.isEmpty()) {
            return str;
        }
        int end = str.indexOf(substr);
        if (end < 0) {
            return str;
        }
        return str.substring(0, end);
    }

    public static String after(String str, String substr) {
        if (str.isEmpty()) {
            return str;
        }
        int begin = str.indexOf(substr);
        if (begin < 0) {
            return str;
        }
        return str.substring(begin + substr.length());
    }

    public static String beforeLast(String str, String substr) {
        if (str.isEmpty()) {
            return str;
        }
        int end = str.lastIndexOf(substr);
        if (end < 0) {
            return str;
        }
        return str.substring(0, end);
    }

    public static String afterLast(String str, String substr) {
        if (str.isEmpty()) {
            return str;
        }
        int begin = str.lastIndexOf(substr);
        if (begin < 0) {
            return str;
        }
        return str.substring(begin + substr.length());
    }

    /**
     * Substring, could use negative idx, for example, -1 means str.length() - 1
     */
    public static String slice(String str, int begin, int end) {
        int len = str.length();
        if (begin < 0) {
            begin += len;
        }
        if (end < 0) {
            end += len;
        }
        return str.substring(begin, end);
    }

    /**
     * Get substring from left with size
     */
    public static String sliceLeft(String str, int len) {
        return str.substring(0, len);
    }

    /**
     * Get substring from right with size
     */
    public static String sliceRight(String str, int len) {
        return str.substring(str.length() - len);
    }

    /**
     * Padding string at left with padding char
     */
    public static String padLeft(String str, int len, char padding) {
        if (str.length() > len) {
            return str;
        }
        StringBuilder sb = new StringBuilder(len);
        int paddingLen = len - str.length();
        for (int i = 0; i < paddingLen; i++) {
            sb.append(padding);
        }
        sb.append(str);
        return sb.toString();
    }

    /**
     * Padding string at left with white space
     */
    public static String padLeft(String str, int len) {
        return padLeft(str, len, ' ');
    }

    /**
     * Padding string at right with padding char
     */
    public static String padRight(String str, int len, char padding) {
        if (str.length() > len) {
            return str;
        }
        StringBuilder sb = new StringBuilder(len);
        sb.append(str);
        int paddingLen = len - str.length();
        for (int i = 0; i < paddingLen; i++) {
            sb.append(padding);
        }
        return sb.toString();
    }

    /**
     * Padding string at right with white space
     */
    public static String padRight(String str, int len) {
        return padRight(str, len, ' ');
    }

    /**
     * Padding string at center with white space
     */
    public static String padCenter(String str, int len) {
        return padCenter(str, len, ' ');
    }

    /**
     * Padding string at center with padding char
     */
    public static String padCenter(String str, int len, char padding) {
        if (str.length() > len) {
            return str;
        }
        StringBuilder sb = new StringBuilder(len);
        int paddingLen = len - str.length();
        int left = paddingLen / 2;
        int right = paddingLen - left;
        for (int i = 0; i < left; i++) {
            sb.append(padding);
        }
        sb.append(str);
        for (int i = 0; i < right; i++) {
            sb.append(padding);
        }
        return sb.toString();
    }

    /**
     * Get new string with str repeat count
     */
    public static String repeat(String str, int count) {
        StringBuilder sb = new StringBuilder(str.length() * count);
        for (int i = 0; i < count; i++) {
            sb.append(str);
        }
        return sb.toString();
    }

    /**
     * To upper case the first char
     */
    public static String capitalize(String str) {
        if (str.isEmpty()) {
            return str;
        }
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }


    /**
     * Only return true when c is ascii digit char
     */
    public static boolean isDigit(char c) {
        return c >= '0' && c <= '9';
    }

    /**
     * Only return true when c is ascii latin letter
     */
    public static boolean isLetter(char c) {
        return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
    }

    /**
     * If this str is a int num
     * return true if string contains and only contains int char
     */
    public static boolean isIntNumber(String str) {
        if (str.isEmpty()) {
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (!isDigit(c)) {
                return false;
            }
        }
        return true;
    }

    /**
     * If this str is a num
     */
    public static boolean isNumber(String str) {
        if (str.isEmpty()) {
            return false;
        }
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (!isDigit(c)) {
                if (c != '.') {
                    return false;
                } else {
                    if (i == 0 || i == str.length() - 1) {
                        return false;
                    }
                    if (++count > 1) {
                        return false;
                    }
                }
            }
        }
        return true;
    }

    /**
     * Format string
     */
    public static String format(String pattern, Object... values) {
        return new StringFormatter(pattern).format(values);
    }


    /**
     * Parse str as int. return 0 if str is not a valid int num
     */
    public static int toInt(String str) {
        return toInt(str, 0);
    }

    /**
     * Parse str as int. return defaultValue if str is not a valid int num
     */
    public static int toInt(String str, int defaultValue) {
        try {
            return Integer.parseInt(str);
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }

    /**
     * Parse str as long. return 0 if str is not a valid num
     */
    public static long toLong(String str) {
        return toLong(str, 0);
    }

    /**
     * Parse str as long. return defaultValue if str is not a valid num
     */
    public static long toLong(String str, long defaultValue) {
        try {
            return Long.parseLong(str);
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }

    /**
     * Parse str as float. return 0 if str is not a valid num
     */
    public static float toFloat(String str) {
        return toFloat(str, 0);
    }

    /**
     * Parse str as float. return defaultValue if str is not a valid num
     */
    public static float toFloat(String str, float defaultValue) {
        try {
            return Float.parseFloat(str);
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }

    /**
     * Parse str as double. return 0 if str is not a valid num
     */
    public static double toDouble(String str) {
        return toDouble(str, 0);
    }

    /**
     * Parse str as float. return defaultValue if str is not a valid num
     */
    public static double toDouble(String str, double defaultValue) {
        try {
            return Double.parseDouble(str);
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy