String parsing in Java with delimiter tab “\t” using split

前端 未结 7 1596
长情又很酷
长情又很酷 2020-11-27 06:01

I\'m processing a string which is tab delimited. I\'m accomplishing this using the split function, and it works in most situations. The problem occurs when a f

相关标签:
7条回答
  • 2020-11-27 06:34

    Well nobody answered - which is in part the fault of the question : the input string contains eleven fields (this much can be inferred) but how many tabs ? Most possibly exactly 10. Then the answer is

    String s = "\t2\t\t4\t5\t6\t\t8\t\t10\t";
    String[] fields = s.split("\t", -1);  // in your case s.split("\t", 11) might also do
    for (int i = 0; i < fields.length; ++i) {
        if ("".equals(fields[i])) fields[i] = null;
    }
    System.out.println(Arrays.asList(fields));
    // [null, 2, null, 4, 5, 6, null, 8, null, 10, null]
    // with s.split("\t") : [null, 2, null, 4, 5, 6, null, 8, null, 10]
    

    If the fields happen to contain tabs this won't work as expected, of course.
    The -1 means : apply the pattern as many times as needed - so trailing fields (the 11th) will be preserved (as empty strings ("") if absent, which need to be turned to null explicitly).

    If on the other hand there are no tabs for the missing fields - so "5\t6" is a valid input string containing the fields 5,6 only - there is no way to get the fields[] via split.

    0 讨论(0)
提交回复
热议问题