gpt4 book ai didi

java - RowFilter.regexFilter 多列

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:12 26 4
gpt4 key购买 nike

我目前正在使用以下内容来过滤我的 JTable

RowFilter.regexFilter( 
Pattern.compile(textField.getText(),
Pattern.CASE_INSENSITIVE).toString(), columns );

如何格式化我的 textField 或过滤器,这样如果我想过滤多个列,我可以这样做。现在我可以过滤多列,但我的过滤器只能是其中一列

一个例子可能有助于我更好地解释:

Name Grade GPA
Zac A 4.0
Zac F 1.0
Mike A 4.0
Dan C 2.0

文本字段将包含 Zac A 或类似内容,如果 columnsint[]{0, 1},它将显示 Zac 的第一行。现在,如果我执行上述操作,我将一无所获。过滤器 Zac 有效,但我得到了两个 ZacA 也可以,但我会得到 Zac A 4.0Mike A 3.0

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

最佳答案

看起来您需要为每一列创建一个单独的过滤器并将它们与 AndFilter 组合起来, 或者通过覆盖 include() 来编写自己的过滤器方法。 RegexFilter 只需要匹配指定的列之一,而且似乎没有办法改变这一点。

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

编辑:我链接到的文档包含一个从两个 RegexFilters 创建 AndFilter 的示例,但该示例非常愚蠢。它创建一个过滤器来查找 foo在任何列或 bar在任何列中——这与带有 foo|bar 的单个 RegexFilter 完全相同作为正则表达式,没有指定列。一个好的 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);

此外,如果我接受过滤文本作为用户输入(您似乎正在这样做),我可能会先引用它:

String regex = "(?i)^" + Pattern.quote(input) + "$";

关于java - RowFilter.regexFilter 多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2494868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com