Efficient way to copy unordered String into ordered String
I'd put token names and positions in a Map like this:

Map&lt;String, Integer&gt; tokenIndexes = new HashMap&lt;String, Integer&gt;();
tokenIndexes.put("token1", 0);
tokenIndexes.put("token2", 2);
tokenIndexes.put("token3", 4);
// ...


and then in the "sorting" part:

String[] newRow = new String[150];

for (int i = 0; i &lt; row.length; i+=2) { // go two by two as you have keys in even indexes
    if(tokenIndexes.contains(row[i])) {
        int index = tokenIndexes.get(row[i]);
        newRow[index] = row[i];
        newRow[index + 1] = row[i + 1];
    } else {
        // handle missing token
    }
}


This way I would get rid of all "if-else" statements, although now I have to maintain a Map (which I think is easier than maintaining a list of "if-else").

UPDATE

I'm supposing you just receive that String array and you're unable to change the way the information is retrieved. If you can change the initial array with a Map that would simplify your code even further.

If that's the case then try this to capture your tokens instead of putting everything in an array (I'm supposing a key is the first token to appear):

Map&lt;String, String&gt; info = new HashTable&lt;String, String&gt;();
boolean isKey = true;
String lastKey = null;
String token;
while(tokensAvailable()  /* or (token = readToken()) != null */) {
    token = readToken();
    if(isKey) {
        lastKey = token;
    } else {
        info.put(lastKey, token);
    }
    isKey = !isKey;
}


And then when you have to print your table, you can do something like this:

printOut("VAL_1    --   VAL_2   --   VAL_3");
printOut(String.format("%08d  --  %10.2  -- %s", info.get("numericVal1"), info.get("monetaryVal2"), info.get("val3")));


String.format() is useful in these cases, you can control the format (like the width) of how every field is printed.