2014-09-01 38 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*消耗可能包围管道字符的任何空白。