C# - 从用户输入中搜索子字符串

时间:2016-11-02 21:27:07

标签: c#

我希望在我的应用程序中添加一个搜索功能,但是我看到很多例子,所有数据都是由程序员添加的。如何实现不预先定义参数/值的搜索功能。我猜测我必须创建一个List<>的另一个实例。因为我已经使用过了吗?

MigLayout layout = new MigLayout("fill");
JPanel panel = new JPanel(layout);

JLabel label1 = new JLabel("Label 1");
label1.putClientProperty("autohide.width", 300);

JLabel label2 = new JLabel("Label 2");
label2.putClientProperty("autohide.width", 200);

panel.add(label1, "grow");
panel.add(label2, "grow");                

layout.addLayoutCallback(new LayoutCallback() {
    @Override
    public void correctBounds(ComponentWrapper wrapper) {
        JComponent component = (JComponent) wrapper.getComponent();

        Number width = (Number) component.getClientProperty("autohide.width");
        if (width != null) {
            if (component.isVisible() && wrapper.getParent().getWidth() < width.intValue()) {
                component.setVisible(false);
            } else if (!component.isVisible() && wrapper.getParent().getWidth() > width.intValue()) {
                component.setVisible(true);
            }
        }
    }
});

}

谢谢。

编辑 -

基本上,搜索功能应该允许用户仅使用子串搜索书籍,即&#34; Mars&#34;应该归还一本标题为#34; The Programmer From Mars&#34; &LT; (只是一个例子)。我猜测我必须使用.Contain方法吗?

3 个答案:

答案 0 :(得分:2)

正确,您需要使用“包含”方法。请注意,“包含”区分大小写,因此您需要满足此要求。

所以你会有类似的东西:

var textToSearch = searchBox.Text.ToLower();

var foundBooks = books.Where(book => book.Title.ToLower().Contains(textToSearch)).ToList();

答案 1 :(得分:1)

假设books是要搜索的图书清单:

List<Book> searchResult = books.Where(b => b.Title.Contains(searchTerm)).ToList();

这将返回在标题中找到输入字符串的书籍列表。 您可以与b.Title == searchTerm完全匹配,与Book的其他属性类似。

上面的语法是LINQ,起初可能有点混乱,但对于这样的事情效果很好。

编辑:

要使用此功能,您需要using System.Linq;

由于您的搜索似乎位于TextChanged,因此您需要将此代码放在searchBox_TextChanged()方法中:

这会获取用户输入的文本框:

TextBox searchTerm = sender as TextBox;

这会按当前搜索过滤您的图书清单:

List<Book> searchResult = books.Where(b => b.Title.Contains(searchTerm.Text)).ToList();

请注意,在另一个答案中,您可能需要执行ToLower()(或更高版本)以使搜索不区分大小写。

现在剩下要做的就是将过滤后的结果searchResult显示给用户。

答案 2 :(得分:0)

管理这样做,这是我的代码,它的工作原理。如果有人想将它用于将来参考,那就是。

angular.module('globalApp', ['searchApp', 'navApp'])
  .controller("globalCtrl", function($scope, $rootScope) {
    $rootScope.loader = false;
  })
  // Code goes here
  });

var searchApp = angular.module("searchApp", []);
searchApp.controller('searchAppsCtrl', function($scope, $rootScope, request, $interval, $log) {
  // Code goes here
});

var navApp = angular.module("navApp", []);
navApp.controller('navSearchCtrl', function($scope, $rootScope, request, $interval, $log) {
    // Code goes here
});