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

io.fabric8.utils.Strings Maven / Gradle / Ivy

/**
 *  Copyright 2005-2016 Red Hat, Inc.
 *
 *  Red Hat 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 io.fabric8.utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

public class Strings {

    /**
     * Returns true if the given text is not null and not empty
     */
    public static boolean notEmpty(String text) {
        return text != null && text.length() > 0;
    }

    public static String nullIfEmpty(String value) {
        if (value == null || value.length() == 0) {
            return null;
        } else {
            return value;
        }
    }

    public static String emptyIfNull(String value) {
        if (value == null) {
            return "";
        } else {
            return value;
        }
    }

    public static String defaultIfEmpty(String value, String defaultValue) {
        return notEmpty(value) ? value : defaultValue;
    }

    /**
     * Returns the first string value which is not null and not blank
     */
    public static String firstNonBlank(String... values) {
        for (String value : values) {
            if (notEmpty(value)) {
                return value;
            }
        }
        return null;
    }

    /**
     * splits a string into a list of strings, ignoring the empty string
     */
    public static List splitAsList(String text, String delimiter) {
        List answer = new ArrayList();
        if (text != null && text.length() > 0) {
            answer.addAll(Arrays.asList(text.split(delimiter)));
        }
        return answer;
    }

    /**
     * splits a string into a list of strings.  Trims the results and ignores empty strings
     */
    public static List splitAndTrimAsList(String text, String sep) {
        ArrayList answer = new ArrayList();
        if (text != null && text.length() > 0) {
            for (String v : text.split(sep)) {
                String trim = v.trim();
                if (trim.length() > 0) {
                    answer.add(trim);
                }
            }
        }
        return answer;
    }

    /**
     * joins a collection of objects together as a String using a separator
     */
    public static String join(final Collection collection, final String separator) {
        StringBuffer buffer = new StringBuffer();
        boolean first = true;
        Iterator iter = collection.iterator();
        while (iter.hasNext()) {
            Object next = iter.next();
            if (first) {
                first = false;
            } else {
                buffer.append(separator);
            }
            buffer.append(next);
        }
        return buffer.toString();
    }

    /**
     * joins a collection of objects together as a String using a separator
     */
    public static String join(final String separator, Object... objects) {
        StringBuffer buffer = new StringBuffer();
        boolean first = true;
        for (Object object : objects) {
            if (first) {
                first = false;
            } else {
                buffer.append(separator);
            }
            buffer.append(object);
        }
        return buffer.toString();
    }
    /**
     * joins a collection of objects together as a String using a separator, filtering out null values
     */
    public static String joinNotNull(final String separator, Object... objects) {
        StringBuffer buffer = new StringBuffer();
        boolean first = true;
        for (Object object : objects) {
            if (object == null) continue;
            if (first) {
                first = false;
            } else {
                buffer.append(separator);
            }
            buffer.append(object);
        }
        return buffer.toString();
    }


    public static String toString(Object object) {
        if (object == null) {
            return "null";
        } else if (object instanceof Object[]) {
            return Arrays.asList((Object[]) object).toString();
        } else {
            return object.toString();
        }
    }
    
    public static String unquote(String text) {
        if (text != null && text.startsWith("\"") && text.endsWith("\"")) {
            return text.substring(1, text.length() - 1);
        } else {
            return text;
        }
    }

    /**
     * This method is used to pad a line by max length with a delimiter.
     * @param delimiter - String that will be used to concatenate to the end of line
     * @param str - string input that will be changed and returned
     * @param max - size of the maximum length of a string
     * @return
     */

    public static String rpad(String delimiter, String str, int max){
        for(int i=1; i<= max; i++){
            str = str.concat(delimiter);
        }
        return str;
    }

    /**
     *  When you have a line that has a maximum length and want to pad the remaining space with ' ' whitespace then
     *  this method is for you.
     * @param delimiter - String that will be used to concatenate to the end of line
     * @param str - string input that will be changed and returned
     * @param max - size of the maximum length of a string
     * @return
     */
    public static String rpadByMaxSize(String delimiter, String str, int max){
        int len= max- str.length();
        for(int i=1; i<= len; i++){
            str = str.concat(delimiter);
        }
        return str;
    }

    public static boolean isNullOrBlank(String value) {
        return value == null || value.length() == 0 || value.trim().length() == 0;
    }

    public static boolean isNotBlank(String text) {
        return !isNullOrBlank(text);
    }

    public static String stripPrefix(String value, String suffix) {
        if (!value.startsWith(suffix)) {
            return value;
        } else {
            return value.substring(suffix.length());
        }
    }
    public static String stripSuffix(String value, String suffix) {
        if (!value.endsWith(suffix)) {
            return value;
        } else {
            return value.substring(0, value.length() - suffix.length());
        }
    }

    public static List parseDelimitedString(String value, String delim) {
        return parseDelimitedString(value, delim, true);
    }

    /**
     * Parses delimited string and returns an array containing the tokens. This
     * parser obeys quotes, so the delimiter character will be ignored if it is
     * inside of a quote. This method assumes that the quote character is not
     * included in the set of delimiter characters.
     *
     * @param value the delimited string to parse.
     * @param delim the characters delimiting the tokens.
     * @return a list of string or an empty list if there are none.
     */
    public static List parseDelimitedString(String value, String delim, boolean trim) {
        if (value == null) {
            value = "";
        }

        List list = new ArrayList();

        int CHAR = 1;
        int DELIMITER = 2;
        int STARTQUOTE = 4;
        int ENDQUOTE = 8;

        StringBuffer sb = new StringBuffer();

        int expecting = (CHAR | DELIMITER | STARTQUOTE);

        boolean isEscaped = false;
        for (int i = 0; i < value.length(); i++) {
            char c = value.charAt(i);

            boolean isDelimiter = (delim.indexOf(c) >= 0);

            if (!isEscaped && (c == '\\')) {
                isEscaped = true;
                continue;
            }

            if (isEscaped) {
                sb.append(c);
            } else if (isDelimiter && ((expecting & DELIMITER) > 0)) {
                if (trim) {
                    list.add(sb.toString().trim());
                } else {
                    list.add(sb.toString());
                }
                sb.delete(0, sb.length());
                expecting = (CHAR | DELIMITER | STARTQUOTE);
            } else if ((c == '"') && ((expecting & STARTQUOTE) > 0)) {
                sb.append(c);
                expecting = CHAR | ENDQUOTE;
            } else if ((c == '"') && ((expecting & ENDQUOTE) > 0)) {
                sb.append(c);
                expecting = (CHAR | STARTQUOTE | DELIMITER);
            } else if ((expecting & CHAR) > 0) {
                sb.append(c);
            } else {
                throw new IllegalArgumentException("Invalid delimited string: " + value);
            }

            isEscaped = false;
        }

        if (sb.length() > 0) {
            if (trim) {
                list.add(sb.toString().trim());
            } else {
                list.add(sb.toString());
            }
        }

        return list;
    }

    /**
     * Converts the given text with the given separator into camelCase
     */
    public static String convertToCamelCase(String text, String separator) {
        StringBuffer buffer = new StringBuffer();
        String[] words = text.split(separator);
        boolean first = true;
        for (String word : words) {
            if (first) {
                buffer.append(word);
                first = false;
            } else {
                if (word.length() > 0) {
                    buffer.append(Character.toUpperCase(word.charAt(0)));
                    if (word.length() > 1) {
                        buffer.append(word.substring(1));
                    }
                }
            }
        }
        return buffer.toString();
    }

    /**
     * Splits a CamelCase string using a space between them.
     */
    public static String splitCamelCase(String text) {
        return splitCamelCase(text, " ");
    }

    /**
     * Splits a CamelCase string using a separator string between them.
     */
    public static String splitCamelCase(String text, String separator) {
            StringBuilder buffer = new StringBuilder();
            char last = 'A';
            for (char c: text.toCharArray()) {
                if (Character.isLowerCase(last) && Character.isUpperCase(c)) {
                    buffer.append(separator);
                }
                buffer.append(c);
                last = c;
            }
            return buffer.toString();
        }


    // String based functions


    public static Function toLowerCaseFunction() {
        return new Function() {
            @Override
            public String toString() {
                return "toLowerCaseFunction()";
            }

            @Override
            public String apply(String value) {
                if (value != null) {
                    return value.toLowerCase();
                }
                return null;
            }
        };
    }

    public static Function toUpperCaseFunction() {
        return new Function() {
            @Override
            public String toString() {
                return "toUpperCaseFunction()";
            }

            @Override
            public String apply(String value) {
                if (value != null) {
                    return value.toUpperCase();
                }
                return null;
            }
        };
    }

    /**
     * Converts a string to a valid environment variable by removing bad characters like '.' and ' '
     */
    public static Function toEnvironmentVariableFunction() {
        return new Function() {
            @Override
            public String toString() {
                return "toEnvironmentVariableFunction()";
            }

            @Override
            public String apply(String key) {
                if (key != null) {
                    // lets replace any dots in the env var name
                    return key.replace('.', '_').replace(' ', '_');
                }
                return null;
            }
        };
    }

    /**
     * Replaces all occurrencies of the from text with to text without any regular expressions
     */
    public static String replaceAllWithoutRegex(String text, String from, String to) {
        if (text == null) {
            return null;
        }
        int idx = 0;
        while (true) {
            idx = text.indexOf(from, 0);
            if (idx >= 0) {
                text = text.substring(0, idx) + to + text.substring(idx + from.length());
            } else {
                break;
            }
        }
        return text;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy