001/*
002 * BridJ - Dynamic and blazing-fast native interop for Java.
003 * http://bridj.googlecode.com/
004 *
005 * Copyright (c) 2010-2013, Olivier Chafik (http://ochafik.com/)
006 * All rights reserved.
007 *
008 * Redistribution and use in source and binary forms, with or without
009 * modification, are permitted provided that the following conditions are met:
010 * 
011 *     * Redistributions of source code must retain the above copyright
012 *       notice, this list of conditions and the following disclaimer.
013 *     * Redistributions in binary form must reproduce the above copyright
014 *       notice, this list of conditions and the following disclaimer in the
015 *       documentation and/or other materials provided with the distribution.
016 *     * Neither the name of Olivier Chafik nor the
017 *       names of its contributors may be used to endorse or promote products
018 *       derived from this software without specific prior written permission.
019 * 
020 * THIS SOFTWARE IS PROVIDED BY OLIVIER CHAFIK AND CONTRIBUTORS ``AS IS'' AND ANY
021 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
022 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
023 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
024 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
025 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
026 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
027 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
029 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
030 */
031package org.bridj.util;
032
033import java.util.ArrayList;
034import java.util.Arrays;
035import java.util.LinkedList;
036import java.util.List;
037import java.util.StringTokenizer;
038import java.util.regex.Matcher;
039import java.util.regex.Pattern;
040
041public class StringUtils {
042
043    public static String implode(double[] array, String separator) {
044        StringBuffer out = new StringBuffer();
045        boolean first = true;
046        for (double v : array) {
047            if (first) {
048                first = false;
049            } else {
050                out.append(separator);
051            }
052            out.append(v);
053        }
054        return out.toString();
055    }
056
057    public static String implode(Object[] values) {
058        return implode(values, ", ");
059    }
060
061    public static String implode(Object[] values, Object separator) {
062        return implode(Arrays.asList(values), separator);
063    }
064
065    public static final <T> String implode(Iterable<T> elements, Object separator) {
066        String sepStr = separator.toString();
067        StringBuilder out = new StringBuilder();
068        boolean first = true;
069        for (Object s : elements) {
070            if (s == null) {
071                continue;
072            }
073
074            if (first) {
075                first = false;
076            } else {
077                out.append(sepStr);
078            }
079            out.append(s);
080        }
081        return out.toString();
082    }
083
084    public static final String implode(Iterable<?> strings) {
085        return implode(strings, ", ");
086    }
087}