在nextElement上拆分命令

时间:2014-09-01 00:44:33

标签: java java-ee

我正在创建一个java servlet,并试图让它显示3个不同文章的预览。我想让它预览每篇文章的第一句话,但是因为我正在阅读带有tokenizer的文章,所以似乎无法正常工作。所以我有类似的东西:

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只打印出第一句而不是整篇文章?我想我可以使用“。”的分隔符进行拆分,但无法使代码正常工作。感谢。

3 个答案:

答案 0 :(得分:0)

尝试

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

获取段落中的第一句话。

答案 1 :(得分: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()读取整行(默认分隔符是换行符char(s))。

split("\\s*\\|\\s*")拆分管道字符上的行(由于管道字符具有特殊的正则表达式含义而必须进行转义),\s*消耗可能包围管道字符的任何空格。

答案 2 :(得分: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>");
            }