【问题标题】:Using regular expressions in Java to do a partial search在 Java 中使用正则表达式进行部分搜索
【发布时间】:2017-03-21 04:05:32
【问题描述】:

美国东部时间晚上 9:42 3 月 21 日:愚蠢的错误。我确保对象的原始创建命名为 .toUpperCase()。部分搜索没有找到搜索词,因为它们没有大写。编辑代码如下。谢谢大家的帮助。


我正在尝试弄清楚如何使用正则表达式来找出是否有任何字符模式与对象中的内容匹配。

例如,如果与对象关联的名称是“StackOverflow”,我希望有人搜索“ck”并使 if 语句为真。那么,为什么我的 if 语句在这里没有返回 true?

ETA:i.getName() 返回一个字符串。该程序循环遍历对象的 ArrayList 以查找名称与输入匹配的对象。

    System.out.println("What name or partial name would you like to filter?");
    String name = input.nextLine();
    int count = 0;
    for (MyObject i: testObject) {
        if (i.getName().matches(".*" + name.toUpperCase() + ".*")) {
            count++;
        }
    }

【问题讨论】:

  • 为什么使用matches 而不是contains
  • 您是否有理由迭代Objects?看来您应该比较Strings。
  • @matt 抱歉,不想发布太多代码。程序正在筛选对象的 ArrayList,getName() 获取对象的字符串名称。
  • 我不认为ObjectgetName 方法?如果你比较Strings,你的代码就可以工作,所以我认为还有其他事情发生。
  • @matt 我做得不太好。我有一个单独的类(未命名对象,但它正在创建对象)。在这个问题中命名不佳。更改为 MyObject 以避免混淆?所以我在 for:each 循环中遍历这些对象。这些对象中的每一个都有一个我定义为 getName() 的方法,它返回一个字符串。

标签: java regex variables search partial


【解决方案1】:

您需要使用 toString()。您不能对对象应用匹配项。

试试看:

System.out.println("What name or partial name would you like to filter?");
String name = input.nextLine();
int count = 0;
for (Object i: testObject) {
    if (i.getName().toString().matches(".*" + name + ".*")) {
        count++;
    }
}

【讨论】:

    【解决方案2】:

    我不确定你的代码为什么不起作用,但是看看这个工作示例,也许你在某个地方有一个小错误。

    这是一个具有 name 字段的 MyObject 类:

    class MyObject {
        private final String name;
    
        public MyObject(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }
    

    这是查找匹配项的程序:

    List<MyObject> myObjects = new ArrayList<MyObject>();
    myObjects.add(new MyObject("Stack Overflow"));
    myObjects.add(new MyObject("Stack Exchange"));
    
    Scanner input = new Scanner(System.in);
    System.out.print("What name or partial name would you like to filter? ");
    String pattern = input.nextLine();
    
    int count = 0;
    for (MyObject i: myObjects) {
        if (i.getName().matches(".*" + pattern + ".*")) {
            count++;
        }
    }
    
    System.out.println("Matches: " + count);
    

    输入:

    ck
    

    输出:

    Matches: 2
    

    【讨论】:

      猜你喜欢
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      相关资源
      最近更新 更多