package hu.sztaki.ilab.longneck.process.block;
import hu.sztaki.ilab.longneck.Record;
import hu.sztaki.ilab.longneck.process.VariableSpace;
/**
* Collapses whitespace characters between tokens to single space characters. This block does not
* remove whitespace from the beginning and the end of a string (use trim for that).
*
* @see Trim
* @author Molnár Péter <molnarp@sztaki.mta.hu>
*/
public class CollapseWhitespace extends AbstractAtomicBlock {
@Override
public void apply(Record record, VariableSpace parentScope) {
for (String fieldName : applyTo) {
String value = BlockUtils.getValue(fieldName, record, parentScope);
if (value == null || "".equals(value)) {
continue;
}
StringBuilder collapsed = new StringBuilder(value.length());
boolean prev = false;
for (int i = 0; i < value.length(); ++i) {
char ch = value.charAt(i);
if (Character.isWhitespace(ch)) {
if (! prev) {
collapsed.append(' ');
}
prev = true;
} else {
collapsed.append(ch);
prev = false;
}
}
BlockUtils.setValue(fieldName, collapsed.toString(), record, parentScope);
}
}
}