StringUtils.java Source code

Java tutorial

Introduction

Here is the source code for StringUtils.java

Source

/*
   Copyright (c) 2009 Olivier Chafik, All Rights Reserved
       
   This file is part of JNAerator (http://jnaerator.googlecode.com/).
       
   JNAerator is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
       
   JNAerator is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
       
   You should have received a copy of the GNU General Public License
   along with JNAerator.  If not, see <http://www.gnu.org/licenses/>.
 */
//package org.ochafik.util.string;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtils {
    public static String htmlize(String text) {
        return text.startsWith("<?") || text.startsWith("<html>") ? text
                : "<html><body>"
                        + text.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("\n", "<br>")
                        + "</body></html>";
    }

    static Pattern spacePattern;

    public static List<String> explode(String s) {
        if (spacePattern == null) {
            spacePattern = Pattern.compile("\\s+");
        }
        return explode(s, spacePattern);
    }

    public static List<String> explode(String s, String sep) {
        StringTokenizer st = new StringTokenizer(s, sep);
        List<String> v = new ArrayList<String>();
        for (; st.hasMoreTokens();) {
            v.add(st.nextToken());
        }
        return v;
    }

    /*
     * public static final String implode(Object[] strings, String separator) {
     * return implode(Arrays.asList(strings), separator); }
     */
    public static String implode(double[] array, String separator) {
        StringBuffer out = new StringBuffer();
        boolean first = true;
        for (double v : array) {
            if (first)
                first = false;
            else
                out.append(separator);
            out.append(v);
        }
        return out.toString();
    }

    public static String implode(Object[] values) {
        return implode(values, ", ");
    }

    public static String implode(Object[] values, Object separator) {
        return implode(Arrays.asList(values), separator);
    }

    public static final <T> String implode(Iterable<T> elements, Object separator) {
        String sepStr = separator.toString();
        StringBuilder out = new StringBuilder();
        boolean first = true;
        for (Object s : elements) {
            if (s == null)
                continue;

            if (first)
                first = false;
            else
                out.append(sepStr);
            out.append(s);
        }
        return out.toString();
    }

    public static final String implode(Iterable<?> strings) {
        return implode(strings, ", ");
    }

    /*
     * public static final String implode(Collection<?> strings, String
     * separator) { int size = 0, n = strings.size(); for (Object s : strings)
     * if (s != null) size += s.toString().length();
     * 
     * StringBuffer out = new StringBuffer(size + separator.length() * (n == 0 ?
     * 0 : n - 1)); boolean first = true; for (Object s : strings) { if (s ==
     * null) continue;
     * 
     * if (first) first = false; else out.append(separator); out.append(s); }
     * return out.toString(); }
     */
    public static final List<String> explode(String string, Pattern separator) {
        int lastIndex = 0, len = string.length();

        Matcher matcher = separator.matcher(string);
        List<String> ret = new LinkedList<String>();

        while (matcher.find()) {
            String s = string.substring(lastIndex, matcher.start());
            if (s.length() > 0)
                ret.add(s);
            lastIndex = matcher.end();
        }
        String s = string.substring(lastIndex, len);
        if (s.length() > 0)
            ret.add(s);

        return ret;
    }

    public static String replace(String pattern, String replace, String s) {
        return concatWithSeparator(explode(s, pattern).toArray(new String[0]), replace);
    }

    public static final String concat(String[] a) {
        StringBuffer b = new StringBuffer();
        for (int i = 0; i < a.length; i++)
            b.append(a[i]);
        return b.toString();
    }

    public static final String concatln(String[] a) {
        StringBuffer b = new StringBuffer();
        int lenm = a.length - 1;
        for (int i = 0; i < lenm; i++) {
            b.append(a[i]);
            b.append("\n");
        }
        if (lenm != -1)
            b.append(a[lenm]);
        return b.toString();
    }

    public static final String concatSpace(String[] a) {
        StringBuffer b = new StringBuffer();
        int lenm = a.length - 1;
        for (int i = 0; i < lenm; i++) {
            b.append(a[i]);
            b.append(" ");
        }
        if (lenm != -1)
            b.append(a[lenm]);
        return b.toString();
    }

    public static final String concatWithSeparator(String[] a, String sep) {
        StringBuffer b = new StringBuffer();
        int lenm = a.length - 1;
        for (int i = 0; i < lenm; i++) {
            b.append(a[i]);
            b.append(sep);
        }
        if (lenm != -1)
            b.append(a[lenm]);
        return b.toString();
    }

    public static final String javaEscape(String s) {
        if (s == null)
            return null;
        char c;
        int len = s.length();
        StringBuffer b = new StringBuffer(len);
        for (int i = 0; i < len; i++) {
            c = s.charAt(i);
            switch (c) {
            case '\n':
                b.append("\\n");
                break;
            case '\t':
                b.append("\\t");
                break;
            case '\r':
                b.append("\\r");
                break;
            case '"':
                b.append("\"");
                break;
            case '\\':
                b.append("\\\\");
                break;
            default:
                if (c > 127 || Character.isISOControl(c)) {
                    b.append("\\u");
                    String nb = Integer.toString((int) c, 16);
                    int nblen = nb.length();
                    switch (nblen) {
                    case 1:
                        b.append(0);
                    case 2:
                        b.append(0);
                    case 3:
                        b.append(0);
                    case 4:
                        b.append(nb);
                        break;
                    default:
                        throw new IllegalArgumentException("Should not happen !");
                    }
                } else
                    b.append(c);
            }
        }
        return b.toString();
    }

    public static final String javaUnEscape(String s) {
        char c;
        int len = s.length();
        StringBuffer b = new StringBuffer(len);
        for (int i = 0; i < len; i++) {
            c = s.charAt(i);
            if (c == '\\') {
                c = s.charAt(++i);
                switch (c) {
                case 'n':
                    b.append('\n');
                    break;
                case 'r':
                    b.append('\r');
                    break;
                case 't':
                    b.append('\t');
                    break;
                case '\\':
                    b.append('\\');
                    break;
                case '"':
                    b.append('"');
                    break;
                case '\'':
                    b.append('\'');
                    break;
                case 'u':
                    try {
                        String nb = s.substring(i + 1, i + 5);
                        int n = Integer.parseInt(nb, 16);
                        b.append((char) n);
                        i += 4;
                    } catch (Exception ex) {
                        throw new IllegalArgumentException(
                                "Illegal unicode escaping in string \"" + s + "\" at index " + i, ex);
                    }
                    break;
                default:
                    throw new IllegalArgumentException("Unknown character: \"\\" + String.valueOf(c) + "...\"");
                }
            } else
                b.append(c);
        }
        return b.toString();
    }

    public static String capitalize(String string) {
        return string == null ? null
                : string.length() == 0 ? "" : Character.toUpperCase(string.charAt(0)) + string.substring(1);
    }

    public static String capitalize(List<String> strings, String separator) {
        List<String> cap = new ArrayList<String>(strings.size());
        for (String s : strings)
            cap.add(capitalize(s));
        return implode(cap, separator);
    }

    public static String uncapitalize(String string) {
        return string.length() == 0 ? "" : Character.toLowerCase(string.charAt(0)) + string.substring(1);
    }

    public static final String LINE_SEPARATOR;
    static {
        LINE_SEPARATOR = System.getProperty("line.separator");
    }

}