2014-09-01 57 views
2

我正在製作一個java servlet,並試圖讓它顯示3篇不同文章的預覽。我希望它能夠預覽每篇文章的第一句話,但由於我正在用標記器閱讀文章,因此似乎無法正確使用拆分工作。所以我有類似的東西:拆分下一個元素的命令

while ((s = br.readLine()) != null) { 
    out.println("<tr>"); 
    StringTokenizer s2 = new StringTokenizer(s, "|"); 
    while (s2.hasMoreElements()) { 
     if (index == 0) { 
      out.println("<td class='first'>" + s2.nextElement() + "</td>"); 
     } 
     out.println("</tr>"); 
    } 
    index = 0; 
} 

如何讓s2.nextElement只打印第一句而不是整篇文章?我想我可以使用「。」分隔符進行分割,但無法讓代碼正常工作。謝謝。

+0

你的句子分裂在一個管道字符'「|」'?如果不是,你用'new StringTokenizer(s,「|」)'的意圖是什麼? – Bohemian 2014-09-01 01:17:54

+0

文章本身就是一個.txt文件,信息由「|」分隔。分隔符。因此,第一個標記器將標題,文章,發佈日期以及與每篇文章關聯的jpg名稱分開。一切都正確出來,除了它打印整個文章,我只是想要它打印第一句(在這種情況下是s2.nextElement是文章本身)。 – Student 2014-09-01 01:26:20

+0

如此單個文件的文章用管道字符分隔,但在每篇文章中究竟是什麼字段以及它們是如何分隔的? – Bohemian 2014-09-01 02:46:01

回答

0

我所做的是將hasMoreElements()更改爲hasMoreTokens()。然後我發現了第一個「。」。並創建一個int值。然後我打印出一個子串。這裏是我的代碼看起來像:

while((s = br.readLine()) != null){ 
     out.println("<tr>"); 
     StringTokenizer s2 = new StringTokenizer(s, "|"); 
     while (s2.hasMoreTokens()){ 
      if (index == 0){ 
       String one = s2.nextToken(); 
       int i = one.indexOf("."); 
       out.println("<td>"+one.substring(0 , i)+"."+"</td>"); 
      } 
0

嘗試

s2.nextElement().split("\\.")[0]; 

拿到的第一句話中的段落。

0

這將是更好地使用Scanner

Scanner scanner = new Scanner(new File("articles.txt")); 
while (scanner.hasNext()) { 
    String article = scanner.next(); 
    String[] parts = article.split("\\s*\\|\\s*"); 
    String title = parts[0]; 
    String text = parts[1]; 
    String date = parts[2]; 
    String image = parts[3]; 
    String firstSentence = text.replaceAll("\\..*", "."); 
    // Output what you like about the article using the extracted parts 
} 

Scanner.next()整行的讀取(默認的分隔符是換行字符(S))。

split("\\s*\\|\\s*")拆分管道字符上的行(因爲管道字符具有特殊的正則表達式含義而必須轉義),並且\s*消耗可能包圍管道字符的任何空白。