Java P5:删除包含Null/NaN的表行

Java P5:删除包含Null/NaN的表行,java,processing,Java,Processing,其目的是从指定列返回一个干净的表,该表只包含其中包含数字数据的行。 下面的代码适用于我。但我忍不住觉得有更好的办法。有没有关于更优雅的解决方案的想法 我有密码: Table removeEmptyRows(Table data, String column_name) { IntList rows_to_remove = new IntList(); Table dataCopy = cloneTable(data); for (int r = 0; r<dataCopy.g

其目的是从指定列返回一个干净的表,该表只包含其中包含数字数据的行。 下面的代码适用于我。但我忍不住觉得有更好的办法。有没有关于更优雅的解决方案的想法

我有密码:

Table removeEmptyRows(Table data, String column_name)
{
  IntList rows_to_remove = new IntList();
  Table dataCopy = cloneTable(data);

  for (int r = 0; r<dataCopy.getRowCount(); r++)
  {
    String value_string = dataCopy.getString(r, column_name);
    ///filter out the NaNs
    if ( ! isNullOrBlank(value_string))
    {
      if ( ! isNumeric(value_string) )
      {
        rows_to_remove.append(r);
      }
    } else {
      rows_to_remove.append(r);
    }
  }


  rows_to_remove.sortReverse();

  for (int r : rows_to_remove)
  {
    dataCopy.removeRow(r);
  }

  return dataCopy;
}

boolean isNumeric(String inputData) {
  return inputData.matches("[-+]?\\d+(\\.\\d+)?");
}

private static boolean isNullOrBlank(String s)
{
  return (s==null || s.trim().equals(""));
}
表removemptyrows(表数据、字符串列名称)
{
IntList rows_to_remove=新建IntList();
表dataCopy=cloneTable(数据);

对于(int r=0;r这个问题可能更适合堆栈交换(请注意,如果您在那里发布,请在交叉帖子之间链接,并确保发布一个true,并明确这是一个处理问题,而不是Java问题),但我将尝试提供一些输入

您可以通过添加好行来简化代码,而不是删除坏行。只复制
可输入
中的列,创建
返回表
,然后循环
可输入
,只添加有效行

另外,请查看此
if
语句:

if ( ! isNullOrBlank(value_string) ) {
    if ( ! isNumeric(value_string) ) {
        rows_to_remove.append(r);
    }
} 
else {
    rows_to_remove.append(r);
}
if (!isNullOrBlank(rowValue) && isNumeric(rowValue)){
这将在一种情况下保留一行:如果值不是
null
或空白,并且是数字。您可以使用单个
if
语句重写此逻辑:

if ( ! isNullOrBlank(value_string) ) {
    if ( ! isNumeric(value_string) ) {
        rows_to_remove.append(r);
    }
} 
else {
    rows_to_remove.append(r);
}
if (!isNullOrBlank(rowValue) && isNumeric(rowValue)){
综上所述,它看起来是这样的:

Table removeEmptyRows(Table inputTable, String columnName){

  Table returnTable = cloneTable(inputTable);
  returnTable.clearRows();

  for (int row = 0; row < inputTable.getRowCount(); row++){
    String rowValue = inputTable.getString(row, columnName);

    if (!isNullOrBlank(rowValue) && isNumeric(rowValue)){
      returnTable.addRow(inputTable.getRow(row));
    }
  }

  return returnTable;

}
表removemptyrows(表可输入,字符串columnName){
Table returnTable=可克隆(可输入);
returnTable.clearRows();
对于(int row=0;row

但是请注意,此代码不一定比您的代码好。它不会更快。如果您理解您的代码,那么这是最重要的。如果它起作用,不要太担心使它“更优雅”。继续下一件事。

什么类是
?这是一个处理类,不知道你的类的功能,我不确定你能得到一个最佳答案。这是一个有效的观点,但不是我的类。这是一个处理中的标准类。我知道这是一个问题,但你能不能发布一篇文章,向我们展示你是如何处理的加载表(一个示例文件会有帮助)并调用
removemptyrows()
函数?