确定细胞分离器

时间:2013-08-12 16:47:14

标签: java parsing text-parsing heuristics

作为输入,我从用户那里得到一个字符串数组。我需要拆分这些行,使它们形成一个表,每行有相同数量的单元格。单元格应包含数字。我想确定单元格分隔符的最佳猜测,并将其作为默认值呈现给用户,如果猜测结果不好,则可以更改。

我认为它是以下之一:标签分号空格逗号。逗号很关键,因为它也被用作德语和其他文化中的小数点。输入可以包含诸如“1.0,2.0,3.0”或“1,0; 2,0; 3,0”

之类的行

到目前为止我的原始解决方案是:

private char getSeparator(String[] rows) {
    String firstRow = rows[0];
    char[] possibleSeparators = new char[] {'\t',';',' ',','};
    char separator = possibleSeparators[1];
    for (int i=0;i<possibleSeparators.length;i++) {
        if (firstRow.indexOf(separator) >= 0) {
            separator = possibleSeparators[i];
            break;
        }
    }
    return separator;
}

是否有更好的启发式方法可以获得细胞分离器的最佳匹配?

表现并不重要!

3 个答案:

答案 0 :(得分:5)

我提出了更复杂的算法:

  • 阅读前10行
  • 对于每一行和每个可能的分隔符,计算出现次数
  • 选择在每行中显示相同次数(至少一次)的分隔符

答案 1 :(得分:2)

遍历每一行并搜索以查看可以使用每个分隔符拆分行的项目数。

将最常分割的行用于每行的相同数量的项目。

但老实说,这项检查既聪明又有趣,可能是不必要的。用户知道他们的数据。我会选择一个默认值,让他们根据需要选择不同的默认值。你甚至可以坚持他们的选择,所以他们不需要一遍又一遍地选择相同的默认值。

答案 2 :(得分:0)

我认为您应该使用java中的reg Ex(正则表达式)来帮助您实现目标。