Convert a CSV list into an array of Strings. - Java File Path IO

Java examples for File Path IO:CSV File

Description

Convert a CSV list into an array of Strings.

Demo Code


//package com.java2s;
import java.util.ArrayList;

import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;

import java.util.List;

public class Main {
    public static void main(String[] argv) throws Exception {
        String str = "java2s.com";
        System.out.println(java.util.Arrays
                .toString(commaDelimitedListToStringArray(str)));
    }//w w w . j  a  va  2s. c om

    /**
     * Convert a CSV list into an array of Strings.
     *
     * @param str
     *            the input String
     * @return an array of Strings, or the empty array in case of empty input
     */
    public static String[] commaDelimitedListToStringArray(final String str) {

        return delimitedListToStringArray(str, ",");
    }

    /**
     * Take a String which is a delimited list and convert it to a String array. <p>A single delimiter can
     * consists of more than one character: It will still be considered as single delimiter string, rather
     * than as bunch of potential delimiter characters - in contrast to <code>tokenizeToStringArray</code>.
     *
     * @param str
     *            the input String
     * @param delimiter
     *            the delimiter between elements (this is a single delimiter, rather than a bunch individual
     *            delimiter characters)
     * @return an array of the tokens in the list
     * @see #tokenizeToStringArray
     */
    public static String[] delimitedListToStringArray(final String str,
            final String delimiter) {

        return delimitedListToStringArray(str, delimiter, null);
    }

    /**
     * Take a String which is a delimited list and convert it to a String array. <p>A single delimiter can
     * consists of more than one character: It will still be considered as single delimiter string, rather
     * than as bunch of potential delimiter characters - in contrast to <code>tokenizeToStringArray</code>.
     *
     * @param str
     *            the input String
     * @param delimiter
     *            the delimiter between elements (this is a single delimiter, rather than a bunch individual
     *            delimiter characters)
     * @param charsToDelete
     *            a set of characters to delete. Useful for deleting unwanted line breaks: e.g. "\r\n\f" will
     *            delete all new lines and line feeds in a String.
     * @return an array of the tokens in the list
     * @see #tokenizeToStringArray
     */
    public static String[] delimitedListToStringArray(final String str,
            final String delimiter, final String charsToDelete) {

        if (str == null)
            return new String[0];
        if (delimiter == null)
            return new String[] { str };
        final List<String> result = new ArrayList<String>();
        if ("".equals(delimiter)) {
            for (int i = 0; i < str.length(); i++) {
                result.add(deleteAny(str.substring(i, i + 1), charsToDelete));
            }
        } else {
            int pos = 0;
            int delPos;
            while ((delPos = str.indexOf(delimiter, pos)) != -1) {
                result.add(deleteAny(str.substring(pos, delPos),
                        charsToDelete));
                pos = delPos + delimiter.length();
            }
            if ((str.length() > 0) && (pos <= str.length())) {
                // Add rest of String, but not in case of empty input.
                result.add(deleteAny(str.substring(pos), charsToDelete));
            }
        }
        return toStringArray(result);
    }

    /**
     * Delete any character in a given String.
     *
     * @param inString
     *            the original String
     * @param charsToDelete
     *            a set of characters to delete. E.g. "az\n" will delete 'a's, 'z's and new lines.
     * @return the resulting String
     */
    public static String deleteAny(final String inString,
            final String charsToDelete) {

        if (!hasLength(inString) || !hasLength(charsToDelete))
            return inString;
        final StringBuilder sb = new StringBuilder();
        for (int i = 0; i < inString.length(); i++) {
            final char c = inString.charAt(i);
            if (charsToDelete.indexOf(c) == -1) {
                sb.append(c);
            }
        }
        return sb.toString();
    }

    /**
     * Copy the given Collection into a String array. The Collection must contain String elements only.
     *
     * @param collection
     *            the Collection to copy
     * @return the String array (<code>null</code> if the passed-in Collection was <code>null</code>)
     */
    public static String[] toStringArray(final Collection<String> collection) {

        if (collection == null)
            return null;
        return collection.toArray(new String[collection.size()]);
    }

    /**
     * Copy the given Enumeration into a String array. The Enumeration must contain String elements only.
     *
     * @param enumeration
     *            the Enumeration to copy
     * @return the String array (<code>null</code> if the passed-in Enumeration was <code>null</code>)
     */
    public static String[] toStringArray(
            final Enumeration<String> enumeration) {

        if (enumeration == null)
            return null;
        final List<String> list = Collections.list(enumeration);
        return list.toArray(new String[list.size()]);
    }

    /**
     * Check that the given CharSequence is neither <code>null</code> nor of length 0. Note: Will return
     * <code>true</code> for a CharSequence that purely consists of whitespace. <p><pre>
     * StringUtils.hasLength(null) = false StringUtils.hasLength("") = false StringUtils.hasLength(" ") = true
     * StringUtils.hasLength("Hello") = true </pre>
     *
     * @param str
     *            the CharSequence to check (may be <code>null</code>)
     * @return <code>true</code> if the CharSequence is not null and has length
     * @see #hasText(String)
     */
    public static boolean hasLength(final CharSequence str) {

        return ((str != null) && (str.length() > 0));
    }

    /**
     * Check that the given String is neither <code>null</code> nor of length 0. Note: Will return
     * <code>true</code> for a String that purely consists of whitespace.
     *
     * @param str
     *            the String to check (may be <code>null</code>)
     * @return <code>true</code> if the String is not null and has length
     * @see #hasLength(CharSequence)
     */
    public static boolean hasLength(final String str) {

        return hasLength((CharSequence) str);
    }
}

Related Tutorials