All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.opencsv.validators.RowMustHaveSameNumberOfColumnsAsFirstRowValidator Maven / Gradle / Ivy

The newest version!
package com.opencsv.validators;

import com.opencsv.exceptions.CsvValidationException;

/**
 * This validator is used when the number of columns is not neccessarily known but must be consistent.
 * The first row validated will always be considered valid, unless null or empty, and after that the each
 * subsequent row must have the same number of columns as the first.
 * 

* Arrays that are empty or null are considered to have 0 elements. An empty or null first row is considered * invalid. *

* As with all row validators the assumption is you have control of the data and have skipped any initial * empty lines. If you have data that has empty lines or separators lines in your data then you should not * use this class. Either extend it or write your own validator. * * @author Scott Conway * @since 5.0 */ public class RowMustHaveSameNumberOfColumnsAsFirstRowValidator implements RowValidator { private static final int NO_ROWS = 0; private int numRows = NO_ROWS; /** * Default constructor. */ public RowMustHaveSameNumberOfColumnsAsFirstRowValidator() { } @Override public boolean isValid(String[] row) { if (row == null || row.length == 0) { return false; } if (firstRowNotSetYet()) { numRows = row.length; } return row.length == numRows; } @Override public void validate(String[] row) throws CsvValidationException { if (!isValid(row)) { if (firstRowNotSetYet()) { throw new CsvValidationException("First row should not be empty or null"); } else if (row == null || row.length == 0) { throw new CsvValidationException("Row should not be empty or null"); } else { throw new CsvValidationException(String.format("Row was expected to have %d elements but had %d instead", numRows, row.length)); } } } private boolean firstRowNotSetYet() { return numRows == NO_ROWS; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy