I think I solved my main issue although I do not understand it enough so I shall ask someone here to point me to a good explanation or explain to me like I am 5.
Consider the following...
String myString = "something that thing, another thing";
Console.WriteLine(myString.SubString(0, myString.Length));
The above will just print out the whole string, that's fine. I didn't make any real changes to myString.
Continuing, with the same myString
Console.WriteLine(myString.SubString(0, myString.LastIndexOf(',')));
That would give me "something that thing" as expected.
Now here comes the silly part, because to my understanding I never changed myString by using LastIndexOf() or .Length
Console.WriteLine(myString.SubString(myString.LastIndexOf(','), myString.length));
That will throw an ArgumentOutOfIndexExpcetion. Because apparently I changed myString... So that now... the proper way to get the half of the string after the ',' is by doing...
Console.WriteLine(myString.SubString(myString.LastIndexOf(','), (myString.length - myString.LastIndexOf(','))));
Main question
Why the hell did I need to reformat my index if I never changed myString to begin with... Aren't all methods within the String class made so that the String never changes.
SO the Java subString is different? since its beginindex to endindex... http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)