2013-10-16 52 views
0

其實,我試圖讀取包含多行的文件。爲此,我正在使用scanner.nextline()Java閱讀線,直到followstop

但是,我想讀直到跟隨停留點(點分隔符),其後通常跟着空格或結束行字符。

在這種情況下,任何機構可以幫助我嗎?

+0

你有什麼tryed?給我們的代碼,然後它easyer幫你 –

回答

0

使用read()方法並通過char讀取char。如果你與之相匹配。這是你的換行符。

其他解決方案可能是設置換行符,然後使用readline()。如果你想搜索,直到一段時間,你可以使用一個Pattern一個Matcher我沒有試過這種howeever

或讀取文件中的ANS使用一次string.split方法

0
FileReader fin = new FileReader("yourfile.txt"); 
Scanner src = new Scanner(fin); 
// Set delimiters to full stop 

src.useDelimiter("."); 


while (src.hasNext()) { 
    // do what you want here 
    } 
+0

我試圖使用這種方法,但如果我有(。)後面是其他任何東西例如23.5它會認爲該點是一個行分隔符。 –

+0

爲了運行你發給我的東西,我會盡我所能,我會看到會發生什麼....非常感謝你 –

+0

所以你爲什麼不嘗試在「。」之後加一個空格。所以它變成了「。」像這樣:src.useDelimeter(「。」); – Andromeda

1

//Pattern p = Pattern.compile("[^\\.]*\\.(\\s+)"); 
Pattern p = Pattern.compile(".*?\\.(\\s+)"); //Anything any amount of times, 
               //followed by a dot and then some whitespace. 

Matcher matcher = p.matcher("firstword. secondword.\n"); 

while(matcher.find()){ 
    boolean space = matcher.group(1).charAt(0) == ' '; 
    System.out.println(matcher.start() + matcher.group() + "and is space: " + (space ? "TRUE" : "FALSE")); 
} 
  1. .*? - .將匹配任何東西。 *匹配0次或多次。 ?lazy匹配器。它匹配任何類型的任意數量的字符,但它會在第一個句點和空格之前停止(因爲懶惰的操作符)。
  2. \\. - 這與一段時間相匹配。在Java中,你必須在正則表達式中加倍轉義特殊字符。
  3. (\\s+) - 這意味着匹配空格(\s,其中包括新行)一次或多次。它匹配一個或多個空白字符。括號「捕獲」了正則表達式的這部分內容,以便每次在正則表達式中找到匹配項時,都可以問它在括號內匹配了哪些特定部分。這可以讓你知道它是空格還是換行符。

matcher.group()獲取剛匹配的字符串。

我在問號中添加了註釋,並將其他模式註釋掉了,因爲它聽起來像你可能在某些數據中間有一段時間。問號做「懶惰」匹配。默認情況下,匹配是貪婪的,並將採用最長的匹配字符串。因此,如果字符串中有多個地方的句號後跟一個空格,則它將作爲一個匹配返回所有這些內容。一旦達到第一個時間段和空間,懶惰迫使它停止匹配任何字符(。*)。

+0

謝謝你的回覆....實際上我不明白這種模式,如果我想讀取點(空格或換行符char) –

+0

好吧。我會在那裏解決它。我爲空白添加了\ s。 –

+0

謝謝我會嘗試,我會看到發生了什麼....但如何處理新行字符(\ n)和空白在一起 –

0

試試這個,

 StringBuilder stringBuilder = new StringBuilder(); 
     while ((line = bufferedReader.readLine()) != null) 
     { 
      if (line.contains(". ") || line.trim().endsWith(".")) 
      { 
       int length = line.indexOf(". "); // get the index when the line contains dot and space in the middle 
       stringBuilder.append(line.trim().endsWith(".") ? line 
         : line.substring(0, length).replace(". ", "." + System.getProperty("line.separator"))); // when the line contains dot at the end or the line may contain the dot with space 
       System.out.println("stringBuilder : " + stringBuilder.toString()); 
       stringBuilder.delete(0, stringBuilder.toString().length()); 
       if (length != 0) 
       { 
        stringBuilder.append(line.substring(length+2, line.length())); 
       } 
      } 
      else 
      { 
       stringBuilder.append(line.replace(System.getProperty("line.separator"), " ")); 
      } 
     } 
     System.out.println("stringBuilder : "+stringBuilder.toString()); // when the last line not end with dot or not contain dot and space