Link to home
Start Free TrialLog in
Avatar of modsiw
modsiw

asked on

String Split() method and pipes

I'm lost for trying to explain this:

public class wtf
{
  public static void main(String[] args)
  {
    String str = "abcdef";
    String[] ary = str.split("|");
    System.out.println(ary.length);
    for(int i = 0; i < ary.length; i++)
      System.out.println(ary[i]);
  }
/*The output of this program is:
7

a
b
c
d
e
f
*/
}


Basicly I have a Vector of pipe delimited strings that I need to turn into a Vector of String arrays (broken at the pipes).
Avatar of Mick Barry
Mick Barry
Flag of Australia image

| is a logical or operator in a reqexp, you need to escape it to use as seperator
ASKER CERTIFIED SOLUTION
Avatar of Mick Barry
Mick Barry
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of modsiw
modsiw

ASKER

thanks
no worries :)
The split may not work if the excape is used for delimiters. Thus the split doesn't work generacally for any delimiter. On can try out this mthod.

public static String[] split(String inputString, String splitter)
    {
        List outputList = new ArrayList();
        if(inputString == null || splitter == null){
            String[] output =  (String[])outputList.toArray();
            return output;
        }
        //if the value doesn't end with the delimiter then added is as we need to get the last value
        int idx = inputString.indexOf(splitter);
        if(!inputString.trim().endsWith(splitter))
            inputString = inputString+splitter;
        while(idx != -1){
            String value = inputString.substring(0, idx);
            outputList.add(value);
            int next = idx+splitter.length();
            inputString = inputString.substring(next);
            idx = inputString.indexOf(splitter);
        }

        Object[] objectArray = new String[outputList.size()];
        outputList.toArray(objectArray);
        String[] output = (String[]) objectArray;

        return output;
    }