2017-03-21 80 views
1

ETA在9:42下午3月21日:愚蠢的錯誤。我確保該對象的原始創建名稱爲.toUpperCase()。部分搜索沒有找到搜索詞,因爲它們沒有大寫。下面編輯的代碼。謝謝大家的幫助。在Java中使用正則表達式進行部分搜索


我想弄清楚如何使用正則表達式來找出是否有任何字符模式匹配對象中的東西。例如,如果與對象關聯的名稱是「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++; 
     } 
    } 
+0

爲什麼使用'matches'而不是['contains'](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains(java.lang.CharSequence ))? – kennytm

+0

是否有你迭代Object的原因?似乎你應該比較'字符串'。 – Matt

+0

@matt對不起,不想發佈太多的代碼。該程序正在篩選對象的ArrayList,getName()獲取對象的String名稱。 – vandy

回答

0

您需要使用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++; 
    } 
} 
0

我不知道爲什麼你的代碼不能正常工作,但看到這樣的工作例如,也許你有一個小失誤的地方。

這裏有一個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