Ok here is a code that will work for you:
String str = "a \"hello world;\";b \"hi there!\"";
String[] arr = str.split(";(?=(([^\"]*\"){2})*[^\"]*$)");
System.out.println(Arrays.toString(arr));
This regex find a semi-colon if it is followed by even number of double quotes (which means ;
is outside quotes).
OUTPUT:
[a "hello world;", b "hi there!"]
PS: It doesn't take care of escaped quotes like \"