Fast alternative for String.split by whitespace
Bug #1

You have an off-by-one error here:


  if(index1 &lt; n - 1)
  {
    result.add(text.substring(index1));
  }



The consequence of this is that "a b c" will be split to ["a", "b"], poor "c" is left out.

Bug #2

I would expect the same output for these calls:


fastSplitWS("");
fastSplitWS("   ");



But that's not the case. The first returns an empty list, the second a list with a single empty string in it.
This behavior is also inconsistent with String.split.

This is caused by this:


if(!y)



One way to fix:

if(!y &amp;&amp; i &gt; 0)


Another way is to initialize y to true.
(Notice that with this variable name,
it's hard to understand the logical meaning of this.)

Readability

@TopinFrassi was too kind.
I find this code extremely hard to read,
mostly due to the poor naming throughout.
The unconventional indenting and brace placement don't help.

Performance

It's worth nothing the trade-offs of using .charAt and .toCharArray.
Take a look at those links, of the implementations in OpenJDK 8:


toCharArray does an arraycopy, using double the space
charAt does a boundary check on the index parameter


Which one is more efficient? I've no idea...

Improvement ideas

The indentation levels can be reduced here:


  if(text != null)
  {
    final int n = text.length();
    if(n &gt; 0)
    {



The first one can be reduced using an early return:

if(text == null) return result;
final int n = text.length();
if(n &gt; 0)
{


The second can be reduced by eliminating the if(n &gt; 0) completely,
as the loop logic takes care of the n == 0 case automatically.

Suggested implementation

Applying the above suggestions and bugfixes, the implementation becomes:

private List&lt;String&gt; fastSplitWS(final String text) {
    if (text == null) {
        throw new IllegalArgumentException("the text to split should not be null");
    }

    final List&lt;String&gt; result = new ArrayList&lt;String&gt;();

    final int len = text.length();
    int tokenStart = 0;
    boolean prevCharIsSeparator = true;  // "preceding char is separator" flag

    char[] chars = text.toCharArray();

    for (int pos = 0; pos &lt; len; ++pos) {
        char c = chars[pos];

        if (c == '\t' || c == ' ') {
            if (!prevCharIsSeparator) {
                result.add(text.substring(tokenStart, pos));
                prevCharIsSeparator = true;
            }
            tokenStart = pos + 1;
        } else {
            prevCharIsSeparator = false;
        }
    }

    if (tokenStart &lt; len) {
        result.add(text.substring(tokenStart));
    }

    return result;
}