code: public static List<String> splitToLines(String csvText) {
          List<String> newLines = new ArrayList<>();
  
          for (Iterator<String> lineItr = Arrays.asList(csvText.split("\r\n|\n")).iterator(); lineItr
                  .hasNext();) {
  
              String line = lineItr.next();
              LOG.trace("line : {}", line);
              StringBuilder newLine = new StringBuilder(line);
  
              // 行内にダブルクオーテーションが奇数個の場合はセル内改行ありとみなし、
              // 次にダブルクオーテーションが奇数個の行までを連結して1行とする。
              if (StringUtils.countMatches(line, '"') % 2 != 0) {
  
                  do {
                      line = lineItr.next();
                      newLine.append("\n");
                      newLine.append(line);
                  } while (StringUtils.countMatches(line, '"') % 2 == 0 && lineItr.hasNext());
  
              }
  
              String newLineStr = newLine.toString();
              LOG.trace("new line : {}", newLineStr);
              newLines.add(newLine.toString());
          }
  
          LOG.trace("actual line number : {}", newLines.size());
          return newLines;
      }
docs: CSV文字列をセル内改行を考慮して1行ずつに分離します。
  
  @param csvText
  CSV文字列
  @return セル内改行を考慮した1行ずつを保持するList