Parsing a string to find next delimiter - Processi

2019-03-06 13:36发布

问题:

So the idea here is that I'm taking a .csv into a string and each value needs to be stored into a variable. I am unsure how to properly parse a string to do this.

My idea is a function that looks like

final char delim = ',';

int nextItem(String data, int startFrom) {
    if (data.charAt(startFrom) != delim) {
        return data.charAt(startFrom)
    } else {
        return nextItem(data, startFrom + 1);
    }
}

so if I passed it something like

    nextItem("45,621,9", 0);

it would return 45

and if I passed it

    nextItem("45,621,9", 3);

it would return 621

I'm not sure if I have that setup properly to be recursive, but I could also use a For loop I suppose, only real stipulation is I can't use the Substring method.

回答1:

Please don't use recursion for a matter that can be easily done iteratively. Recursion is expensive in terms of stack and calling frames: A very long string could produce a StackOverflowError.

I suggest you take a look to standard method indexOf of java.lang.String:



回答2:

A good alternative is Regular Expressions. You can seperate the words considering comma ',' as delimeter

Code

String[] nextItem(String data) {
    String[] words=data.split(",");  
    return words;     
}

This will return an array of strings that is the words in your input string. Then you can use the array in anyway you need.

Hope it helps ;)



回答3:

Processing comes with a split() function that does exactly what you're describing.

From the reference:

String men = "Chernenko,Andropov,Brezhnev";
String[] list = split(men, ',');
// list[0] is now "Chernenko", list[1] is "Andropov"...

Behind the scenes it's using the String#split() function like H. Sodi's answer, but you should just use this function instead of defining your own.