Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RowFilter.regexFilter多列_Java_Regex_Jtable_Rowfilter - Fatal编程技术网

Java RowFilter.regexFilter多列

Java RowFilter.regexFilter多列,java,regex,jtable,rowfilter,Java,Regex,Jtable,Rowfilter,我目前正在使用以下内容筛选我的JTable RowFilter.regexFilter( Pattern.compile(textField.getText(), Pattern.CASE_INSENSITIVE).toString(), columns ); 如何格式化我的textField或filter,以便如果我想筛选多个列,我可以这样做。现在我可以过滤多个列,但我的过滤器只能是其中一列 举个例子可以帮助我更好地解释: Name Grade

我目前正在使用以下内容筛选我的
JTable

RowFilter.regexFilter( 
         Pattern.compile(textField.getText(), 
         Pattern.CASE_INSENSITIVE).toString(),     columns );
如何格式化我的
textField
或filter,以便如果我想筛选多个列,我可以这样做。现在我可以过滤多个列,但我的过滤器只能是其中一列

举个例子可以帮助我更好地解释:

Name Grade GPA
Zac   A    4.0
Zac   F    1.0
Mike  A    4.0
Dan   C    2.0
文本字段将包含
Zac A
或类似内容,如果
columns
int[]{0,1}
,它将显示第一行Zac。现在,如果我做了以上这些,我什么也得不到。过滤器
Zac
工作,但我同时得到
Zac
A
也可以工作,但我会得到
ZacA4.0
MikeA3.0


我希望我已经很好地解释了我的问题。如果您不理解,请告诉我。

看起来您需要为每列创建一个单独的筛选器并将其与组合,或者通过重写该方法编写您自己的筛选器。RegexFilter只需要一个指定的列来匹配,而且似乎没有办法改变这一点

顺便说一下,如果您想强制正则表达式忽略大小写,您应该在它的开头添加
(?i)
。尽管使用了不区分大小写的标志,但生成的字符串与开始时的字符串相同

编辑:我链接到的文档包含一个从两个RegexFilter创建AndFilter的示例,但是这个示例非常愚蠢。它创建了一个过滤器,用于在任何列中查找
foo
,或在任何列中查找
bar
——这与单个RegexFilter完全相同,其中
foo | bar
作为正则表达式且未指定任何列。一个好的AndFilter示例应该做一些只有AndFilter才能做的事情:一次对两个或多个列强制执行条件,就像您试图做的那样。下面是我如何在第一列和第二列中对
Zac
A
进行不敏感的筛选:

List<RowFilter<Object,Object>> rfs = 
    new ArrayList<RowFilter<Object,Object>>(2);
filters.add(RowFilter.regexFilter("(?i)^Zac$", 0));
filters.add(RowFilter.regexFilter("(?i)^A$", 1));
RowFilter<Object,Object> af = RowFilter.andFilter(rfs);
RowFilter过滤器=
RowFilter.orFilter(Arrays.asList)(RowFilter.regexFilter(lookup,0),
regexFilter(查找,1));

RowFilter过滤器=
regexFilter(Pattern.compile(查找,Pattern.CASE_不区分大小写).toString(),0,1);

0和1是列号

通过结合oracle的教程和中的答案,我得出以下结论:

RowFilter<PublicationTableModel, Object> rf = null;
List<RowFilter<Object,Object>> rfs = 
            new ArrayList<RowFilter<Object,Object>>();

try {
    String text = txtFilter.getText();
    String[] textArray = text.split(" ");

    for (int i = 0; i < textArray.length; i++) {
        rfs.add(RowFilter.regexFilter("(?i)" + textArray[i], 0, 1, 2, 4));
    }

    rf = RowFilter.andFilter(rfs);

} catch (java.util.regex.PatternSyntaxException e) {
        return;
}

sorter.setRowFilter(rf);
RowFilter rf=null;
列表rfs=
新的ArrayList();
试一试{
String text=txtFilter.getText();
字符串[]textArray=text.split(“”);
对于(int i=0;i

这是一个非常简单的过滤器,它从一个文本框中提取所有文本,拆分单词并动态创建许多过滤器。然后,将它们与andFilter组合,并将其放回表格模型的分拣机。

为了清楚起见,您可以将andFilter添加到另一个andFilter,正确吗?另外,在哪里添加
(?I)
?无论我把它放在哪里,我都会得到一个错误。AndFilter是RowFilter,所以我不明白为什么不能将一个添加到另一个,但我不认为有必要在这里这样做。请参阅我的编辑,它也涵盖了
(?i)
。我使用了不敏感的大小写。但是我没有包括
^
$
,只包括
(?I)
——否则它就不起作用了。现在正在制作
和过滤器
。我创建了
和过滤器
。它似乎工作得很好。谢谢你的帮助。
RowFilter<TableModel, Object> filter =
    RowFilter.orFilter(Arrays.asList(RowFilter.regexFilter(lookup,0),
    RowFilter.regexFilter(lookup, 1)));
RowFilter<TableModel, Object> filter =
    RowFilter.regexFilter(Pattern.compile(lookup,Pattern.CASE_INSENSITIVE).toString(),0,1);
RowFilter<PublicationTableModel, Object> rf = null;
List<RowFilter<Object,Object>> rfs = 
            new ArrayList<RowFilter<Object,Object>>();

try {
    String text = txtFilter.getText();
    String[] textArray = text.split(" ");

    for (int i = 0; i < textArray.length; i++) {
        rfs.add(RowFilter.regexFilter("(?i)" + textArray[i], 0, 1, 2, 4));
    }

    rf = RowFilter.andFilter(rfs);

} catch (java.util.regex.PatternSyntaxException e) {
        return;
}

sorter.setRowFilter(rf);