集册 Java实例教程 将CSV列表转换为字符串数组。

将CSV列表转换为字符串数组。

欢马劈雪     最近更新时间:2020-01-02 10:19:05

787
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
将CSV列表转换为字符串数组。


//package com.nowjava;

import java.util.ArrayList;/*nowjava.com - 时  代  Java*/


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 = "nowjava.com";

        System.out.println(java.util.Arrays

                .toString(commaDelimitedListToStringArray(str)));

    }


    /**

     * 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) {

    /* 
     来自 
    *NowJava.com - 时代Java*/

        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()]);

    }


    
展开阅读全文