/**
* Returns the indices of searched for headers, e.g. if the file looks like this: (Name Email
* Phone Age) and we call the method: findIndices("Name", "Age", "Email", "Phone"), if returns
* [0,3,1,2].
*
* Ignores case of letters, i.e. Age and AGE "is" the same.
*
* @param input Strings to search for in the header
* @return int[] with indices for the columns
*/
public int[] findIndices(String... input) throws IllegalArgumentException {
int[] indices = new int[input.length];
if (input.length > this.headers.length) {
throw new IllegalArgumentException("Amount of searched for headers, " + input.length
+ ", exceeded the actual amount of headers: " + this.headers.length);
}
boolean found = true; // Assume we will find all headers.
int k = 0; // Counter variable.
for (int i = 0; i < this.headers.length; i++) {
for (String s : input) {
if (s.equalsIgnoreCase(this.headers[i])) {
indices[k++] = i;
found = true;
} else {
found = false;
}
}
}
if (!found) {
throw new IllegalArgumentException(
"One or more of input arguments could not be found in the headers.");
}
return indices;
}
Edit: Found a bug which did not show up in my unit tests due to a misunderstanding of the JUnit api, found -> !found.