2017-08-10 16 views
0

我試圖解決項目歐拉#26,我使用正則表達式來解決 的問題,但編譯我得到方法沒有發現錯誤時java的正則表達式編譯和匹配找不到符號錯誤

import java.lang.*; 
import java.math.*; 
import java.util.regex.*; 

class Pattern { 
    public static void main(String args[]) { 
     int count = 0; 
     String regex = "(//d+?)//1)"; 
     Pattern p = Pattern.compile(regex); //cannot find symbol compile 
     BigDecimal b = new BigDecimal("1"); 
     for (int i = 1; i <= 10; i++) { 
      BigDecimal b1 = new BigDecimal(i); 
      String elem = b.divide(b1, 15, RoundingMode.HALF_UP).toString(); 
      Matcher match = p.matcher(elem); //cannot find symbol matcher 
      while (match.find()) { 
       int x = match.start() - match.end(); 
       if (x > count) 
        count = x; 
      } 
     } 
     System.out.println("the highest count is" + count); 
    }  
} 
+0

除了在@ Peter777答案中指出的錯字,您的[代碼沒有錯誤地工作](http://rextester.com/UAD40418)。我不認爲你實際上看到了你在問題中發佈的錯誤。也許這是由以前的代碼產生的。 –

+0

'import java.lang。*;' - 不需要 –

+0

@ScaryWombat編譯,但不會運行,由於錯字:'String regex =「(// d +?)// 1)」;' –

回答

1

String regex="(//d+?)//1)"; 這個正則表達式肯定是不正確的。你有兩個關閉)和只有一個(

也請確保您的圖案類從java.util.Regex包導入。

+0

但是不會導致OP試圖初始修復的編譯問題 –

+0

@ScaryWombat修復這個錯字可以讓代碼運行,不知道程序是否真的在運行。 –

+0

*確保您的Pattern類是從*導入的 - 它不是因爲該類名爲'Pattern' –

2

您有多個問題:

  1. 你的正則表達式是錯誤的,因爲@ Peter777指出
  2. 你的類名爲Pattern,同java.util.regex.Pattern,這使編譯器嘗試使用編譯方法上的而不是java.util.regex之一。

要嘗試解決問題,請修復正則表達式並將類重命名爲其他內容(或導入帶有別名的java.util.regex)。

+0

好spotup nivox –