2017-01-30 80 views
-1

好的,我完全重寫了這個問題,因爲這個問題有效,我想知道它爲什麼起作用。避免在Java的string.matches()方法中兩次匹配相同的值

假設我有一個號碼,testNumber與567

我想知道一個值,如果接下來的兩個數字(shouldPassTest和shouldFailTest)相同的數字,但在不同的地方10S。

所以這裏的代碼:

int testNumber = 567; 
int num1 = 5; 
int num2 = 6; 
int num3 = 7; 

int shouldPassTest = 756; 
int shouldFailTest = 777; 


if(Integer.toString(shouldPassTest).matches("[5,6,7][5,6,7][5,6,7]") 
{ 
    //Do some cool stuff 
} 

if(Integer.toString(shouldFailTest).matches("[5,6,7][5,6,7][5,6,7]") 
    { 
     //Do some cool stuff 
    } 

當您運行,是每一位都從可用位的範圍內測試時,會發生什麼(5,6和7)。理論上,shouldFailTest 實際上應該通過測試看到7如何符合我的三個標準之一,儘管3次。

但是,測試時發生的是777返回false。這正是我想在我的代碼中得到的結果,但我想知道爲什麼它發生了。匹配方法測試是否確保每個數字只匹配一次?

謝謝!

此帖被高度編輯。運行我的代碼後,我發現該方法正是我想要的,但現在我想知道爲什麼。謝謝。

+0

這聽起來像你想看看是否一個數是另一個字謎。 – azurefrog

+0

「不同的解決方案」。使用'Integer.toString'後,將字符串分解爲字符,並使用數組來保存字符。然後你可以從數組中刪除東西。更好的辦法是使用'Set',但如果你的數字可以有多個相同的數字,那麼這樣做不會很好。但不要試圖用正則表達式來解決這個問題。 – ajb

+0

是的,奇怪的是,代碼正是我想要的。 777返回false。現在我既驚喜又困惑。 –

回答

1

我會用下面的正則表達式作爲是不是一個很好的解決了這個問題:

public class Count { 
    private int value; 
    public Count() { 
     value=0; 
    } 
    void increment() { 
     value++; 
    } 
    void decrement() { 
     value--; 
    } 

    public int getValue() { 
     return value; 
    } 
} 
public static boolean isAnagram(int val1, int val2) { 
    Map<Character, Count> characterCountMap=new HashMap<>(); 
    for(char c:Integer.toString(val1).toCharArray()) { 
     Count count=characterCountMap.get(c); 
     if(count==null) { count=new Count(); characterCountMap.put(c, count);} 
     count.increment(); 
    } 
    for(char c:Integer.toString(val2).toCharArray()) { 
     Count count=characterCountMap.get(c); 
     if(count==null) { return false; } 
     else { count.decrement(); } 
     if(count.getValue()==0) { 
      characterCountMap.remove(c); 
     } 
    } 
    return characterCountMap.size()==0; 
} 

請運行:

System.out.println(Integer.toString(shouldFailTest).matches("[5,6,7][5,6,7][5,6,7]")); 

查看實際的返回值。

0

理論上,shouldFailTest實際上應該通過測試看到,因爲 7場比賽我的三個標準之一,雖然3次如何。

但是,測試時發生的是777返回false。這是 恰恰是我想要的代碼中的結果,但我想知道爲什麼它發生了 。匹配方法測試是否確保每個號碼 只匹配一次?

沒有, 「777」 不匹配您的代碼已經指定的模式 「[5,6,7] [5,6,7] [5,6,7]」

以下條件將評估爲真。

if(Integer.toString(shouldFailTest).matches("[5,6,7][5,6,7][5,6,7]"))

相關問題