2016-03-18 41 views
-1

這是我的代碼。如何檢測支撐(在線或新線的末端)?

while(in.hasNext()){ 
     String line = in.nextLine(); 
     in.hasNextLine(); 
     if (line.length() >0){ 
      int k = -1; 
      k = -1; 
      while(true){ 
       k = line.indexOf('\n' + "{", k+1); 
       if(k<0)break; 
       bracketNewLine++; 
      } 
      k = -1; 
      while(true){ 
       k = line.indexOf(" {", k+1); 
       if(k<0)break; 
       bracketWithSpace++; 
      } 
     } 
    } 

,如果我有文本文件

if (...) { 
} 

and 

if (...) 
{ 
} 

輸出是:行

  • 布萊希特年底有:1
  • 布萊希特新線分別是:1

謝謝你的回答。

+0

由於您逐行分析文件,我懷疑該行永遠不會包含'\ n'+「{」'; –

回答

0

您逐行讀取文件。因此,沒有機會找到字符\n後跟另一個字符在同一個字符串中。因此,將永遠找不到'\n' + "{"

你可以用簡單的regex做到這一點:

for(String line : Files.readAllLines(Paths.get("/path/to/input.txt"))) { 
    if(line.matches("\\{.*")) { 
    bracketNewLine++; 
    } 

    if(line.matches(".* \\{")) { 
    bracketWithSpace++; 
    } 
} 
+0

輸出bracketNewLine爲0,但在我的文本文件中,我在一個新行中添加了「{」(單獨) – Anonymous

+0

@Anonymous我認爲您正在跳過第一行(因爲第一個'in.nextLine()')。我編輯了我的答案以顯示如何閱讀輸入文件。你可以測試嗎?在我的計算機上,我得到了預期的答案:'bracketNewLine = 1' –

+0

是的,我測試了 但是,在我的代碼中使用Scanner像這樣(https://dl.dropboxusercontent.com/u/66286522/Screen%20Shot% 202559-03-18%20at%204.53.03%20 PM.png) – Anonymous

0

你可以使用一些正則表達式是這樣的:

String patternInLine = ".+\\{$"; 
String patternNewLine = "^\\{": 

Pattern p1 = new Pattern(patternInLine); 
Pattern p2 = new Pattern(patternNewLine); 

while(in.hasNext()) { 
    String line = in.nextLine(); 
    in.hasNextLine(); 

    Matcher m1 = p1.match(line); 
    Matcher m2 = p2.match(line); 
    if(m1.match()) 
    { 
     //inLine++; 
    } 
    else if (m2.match()) 
    { 
     //newLine++; 
    } 
    else 
    { 
     //other cases 
    } 
} 
0

當您使用nextLine()方法,你已經通過行的源代碼行。你應該做的唯一事情就是用現有的字符串方法在每個循環中檢查這些行:startsWith(),endsWith()。如果我們假設你是正確獲得行字符串中的每個循環中,雖然塊的內部應該是這樣的:

if(line.startsWith("{")) 
    bracketNewLine++; 
if(line.endsWith("{")) 
    bracketWithSpace++; 

P.S.1 hasNext()方法不向我們保證,我們又多了一個新的生產線。

P.S.2使用固定大小的空間搜索字符串不是真正的方法。您可以使用正則表達式來代替:^[\s]*{