First thing, you have remaining string == "stuff" comparisons. As you commented, this doesn't work: Strings in Java are objects, and you can must compare objects using equals(). Actually, you can use == but it compares references, not content.
Code:String a = "foo";
String b = a;
println(a == b); // true
b = "foo";
println(a == b); // true: literal strings are interned in Java
b = "f" + "oo";
println(a == b); // true: Java compiler is smart enough to do concatenation itself...
b = "f";
b += "oo";
println(a == b); // false!
Idem when you get a string from an external source (user input, file...).
Mmm, looking again at the source, it can work because precisely you use the same literal strings.
Note that I would define these strings at class level as constants, to highlight the fact they are the same entity.
Next, your question.
protocolRules.add(new ArrayList<String>());can work. If protocolRules is a Collection (eg. an ArrayList) of type ArrayList<String>...
Now, I am not sure why you add an empty array list there.
And if the code is in a .pde file, you must use untyped ArrayLists: Processing uses Java 1.6 but is currently stuck on 1.4 syntax. The 1.6 syntax is only usable within .java files in the sketch. (I should copy this sentence and paste it each time...)