有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

正则表达式在Java中使用正则表达式进行部分搜索

预计3月21日晚上9:42:愚蠢的错误。我确保对象的原始创建产生了名称。toUpperCase()。部分搜索未找到搜索词,因为它们未大写。编辑代码如下。谢谢大家的帮助


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

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

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++;
        }
    }

共 (2) 个答案

  1. # 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. # 2 楼答案

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

    下面是一个MyObject类,它有一个name字段:

    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