Разделить по этому шаблону:
(?<=\"?),(?!\")|(?<!\"),(?=\")
так будет:
String[] splitArray = subjectString.split("(?<=\"?),(?!\")|(?<!\"),(?=\")");
UPD: в соответствии с недавними изменениями в логике вопроса, лучше не использовать разделение по голымсначала следует отделить текст через запятую от текста без запятых, а затем выполнить простое разбиение (",") на последнем.Просто используйте простой цикл for и проверьте, сколько кавычек вы встретили, одновременно сохраняя прочитанные символы в StringBuffer.Сначала вы сохраняете свои символы в StringBuffer, пока не встретите кавычки, затем вы помещаете свой StringBuffer в массив, содержащий строки, которых не было в кавычках.Затем вы создаете новый StringBuffer и сохраняете следующие символы, которые вы читаете, после того, как вы встретили вторую запятую, вы останавливаете и помещаете свой новый StringBuffer в массив, содержащий строки, которые были в запятых.Повторяя до конца строки.Таким образом, у вас будет 2 массива, один со строками, которые были в запятых, другие со строками, не запятыми.Затем вы должны разделить все элементы второго массива.