2

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

我认为它是以下之一:制表符分号空格逗号。逗号很重要,因为它也被用作德语和其他文化中的小数点。输入可能包含诸如“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;
}

是否有更好的启发式方法来获得单元分隔符的最佳匹配?

性能无所谓!

4

3 回答 3

5

我提出了一个更复杂的算法:

  • 读取前 10 行
  • 对于每一行和每个可能的分隔符,计算出现次数
  • 选择在每行中出现相同次数(并且至少一次)的分隔符
于 2013-08-12T16:51:40.737 回答
2

遍历每一行并搜索以查看使用每个分隔符可以将该行拆分为多少项。

使用最常将行拆分为每行相同数量的项目的行。

但老实说,这种检查虽然聪明有趣,但可能是不必要的。用户知道他们的数据。我会选择一个默认值,如果需要,让他们选择一个不同的值。您甚至可以保留他们的选择,这样他们就不必一遍又一遍地选择相同的默认值。

于 2013-08-12T16:51:37.567 回答
0

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

于 2013-08-12T16:51:16.563 回答