2017-10-21 27 views
1

返回我的羣組的長度來我INT

package files; 
 
import java.util.regex.Matcher; 
 
import java.util.regex.Pattern; 
 

 
public class Regex { 
 
\t public static String arr[]; 
 
\t public static void main(String[] args) throws Exception { 
 
\t \t 
 
\t \t String fiveFour="kkkkaaaaa"; 
 
\t \t String condition="[a]{5}|[k]{1}"; 
 
\t \t int size=0; 
 
\t \t regTest(condition,fiveFour,size); 
 
\t System.out.println(size); 
 
\t \t 
 
\t \t 
 
\t \t 
 
\t } 
 
\t 
 
\t public static int regTest(String regexThing, String toCheck, int size){ 
 
\t \t Pattern pattern= Pattern.compile(regexThing); 
 
\t \t Matcher regexMatcher= pattern.matcher(toCheck); 
 
\t \t 
 
\t \t int i=0; 
 
\t \t 
 
\t \t while(regexMatcher.find()){ 
 
\t \t \t i++; 
 
\t \t \t System.out.println(regexMatcher.group()); 
 
\t \t \t if(regexMatcher.group().length()!=0){ 
 
\t \t \t \t System.out.println(regexMatcher.group().length()); 
 
\t \t \t \t 
 
\t \t \t \t 
 
\t \t \t \t 
 
\t \t \t } 
 
\t \t \t 
 
\t \t \t 
 
\t \t } 
 
\t \t 
 
\t \t return i; 
 
\t \t 
 
\t } 
 
\t // work on return try maybe a increment and returning that at the end! 
 
\t //stacks 
 
\t 
 
}

我無法回到我regexMatcher.group().length(),在我的心意它打印出5這是正確的。但是它不會將該值分配給大小,因此我可以將其返回。任何幫助?這是一個邏輯錯誤,我沒有看到我出錯的地方。

package files; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Regex { 
    public static String arr[]; 
    public static void main(String[] args) throws Exception { 
     String fiveFour="kkkkaaaaa"; 
     String condition="[a]{5}|[k]{1}"; 
     int size=0; 
     regTest(condition,fiveFour,size); 
     System.out.println(size); 
    } 

    public static int regTest(String regexThing, String toCheck, int size){ 
     Pattern pattern= Pattern.compile(regexThing); 
     Matcher regexMatcher= pattern.matcher(toCheck); 

     int i=0; 

     while(regexMatcher.find()){ 
      i++; 
      System.out.println(regexMatcher.group()); 
      if(regexMatcher.group().length()!=0){ 
       System.out.println(regexMatcher.group().length()); 
       i++; 
      } 
     } 
     return size; 
    } 
    // work on return try maybe a increment and returning that at the end! 
    //stacks 
} 
+0

hrmmm ...任何建議?即時通過方法尋找 –

回答

0

你永遠分配的regexMatcher.group().length()的結果size

因此,有你需要改變兩件事情,第一就是你的方法裏面,你要添加:

size = regexMatcher.group().length(); 

現在,regTest方法size內有值爲5,你我期待着。但是,因爲Java按值傳遞原語(有關更多解釋,請參閱this question),這意味着您傳入方法的size與主方法中的size不同,因此您需要執行更多操作。

你從你的方法返回size,所以在主叫方,您可以分配到原size變量,如:

size = regTest(condition, fiveFour, size); 

現在,因爲你從來沒有真正用在了size參數regTest方法,你實際上並不需要在通過它,因爲你只有真正關心它的返回值,所以它可能是清潔劑只是,在你的主要方法:

int size = regTest(condition, fiveFour); 

然後在regTest方法,擺脫size乾脆,只是有:

return regexMatcher.group().length(); 
+0

哇很好的答案,即時測試它現在。我一直認爲return會更改方法中傳遞的值?但是你的做法是用方法 –

+0

來分配這個變量,如果我想增加每個找到的匹配項,那麼該怎麼辦?謝謝brotha –

+0

不,返回有效返回一個新的值給調用者。如果你沒有把方法的結果分配給任何東西,那麼回報很大程度上是沒有意義的,價值並沒有去任何地方。 我不太確定增加查找匹配的意思,Matcher類有一個'groupCount()'方法,它是做你想做的嗎?如果不是,最好就此提出一個新問題,以便將答案分開。 – DaveyDaveDave

-1

該模式可確保返回與條件匹配的組。如果(regexMatcher.group()。length()!= 0)無需額外驗證。在java中的原始數據類型是不可變的。 如果你的意圖是找到總體組,那麼我會給出相同的價值。 參考http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

+0

這並沒有真正回答這個問題,雖然它似乎是明智的建議。 – DaveyDaveDave