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