Thursday, March 31, 2011

Java split() method strips empty strings at the end?

Check out the below program.

public class test {

  /**
   * @param args
   */
  public static void main(String[] args)  {
    try {
      String data = null;
      // TODO Auto-generated method stub
      BufferedReader br = new BufferedReader(new FileReader(new File("D:/sample.txt")));
      while((data=br.readLine())!= null){
        String[] de = data.split(";");
        System.out.println("Length ="+de.length);
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

Sample.txt:

1;2;3;4
A;B;;
a;b;c;

Output:

Length =4
Length =2
Length =3

Why second and third output is giving 2 and 3 instead of 4. In sample.txt file, condition for 2nd and 3rd line is should give newline(\n or enter) immediately after giving delimiter for the third field. Can anyone help me how to get length as 4 for 2nd and 3rd line without changing the condition of the sample.txt file and how to print the values of de[2] (showing an arrayindexoutofbound exception)?

From stackoverflow
  • have a look at the docs, here the important quote:

    [...] the array can have any length, and trailing empty strings will be discarded.
    

    If you don't like that, have a look at Fabian's comment. When calling String.split(String), it calls String.split(String, 0) and that discards trailing empty strings (as the docs say it), when calling String.split(String, n) with n < 0 it won't discard anything.

  • You can specify to apply the pattern as often as possible with:

    String[] de = data.split(";", -1);
    

    See the Javadoc for the split method taking two arguments for details.

    raja : Yeah.. I got it.. Its working fine now. Thanks alot..
    Alan Moore : So mark the answer as accepted.

0 comments:

Post a Comment