How to parse fixed-length data and why you should avoid 'String.substring'