String.split uses Regular Expressions, also you don't need to allocate an extra array for your split.
The split-method will give you a list., the problem is that you try to pre-define how many occurrences you have of a tab, but how would you Really know that? Try using the Scanner or StringTokenizer and just learn how splitting strings work.
Let me explain Why does not work and why you need \\
to escape \
.
Okay, so when you use Split, it actually takes a regex ( Regular Expression ) and in regular expression you want to define what Character to split by, and if you write that actually doesn't mean
and what you WANT to split by is
, right? So, by just writing
you tell your regex-processor that "Hey split by the character that is escaped t" NOT "Hey split by all characters looking like
". Notice the difference? Using means to escape something. And
in regex means something Totally different than what you think.
So this is why you need to use this Solution:
\t
To tell the regex processor to look for . Okay, so why would you need two of em? Well, the first escapes the second, which means it will look like this: when you are processing the text!
Now let's say that you are looking to split
Well then you would be left with \ but see, that doesn't Work! because will try to escape the previous char! That is why you want the Output to be \ and therefore you need to have \\.
I really hope the examples above helps you understand why your solution doesn't work and how to conquer other ones!
Now, I've given you this answer before, maybe you should start looking at them now.
OTHER METHODS
StringTokenizer
You should look into the StringTokenizer, it's a very handy tool for this type of work.
Example
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
This will output
this
is
a
test
You use the Second Constructor for StringTokenizer to set the delimiter:
StringTokenizer(String str, String delim)
Scanner
You could also use a Scanner as one of the commentators said this could look somewhat like this
Example
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\s*fish\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
The output would be
1
2
red
blue
Meaning that it will cut out the word "fish" and give you the rest, using "fish" as the delimiter.
examples taken from the Java API