2014-09-01 2 views
2

자바 서블릿을 만들고 3 개의 다른 기사의 미리보기를 표시하려고합니다. 나는 각 기사의 첫 번째 문장을 미리보기를 원하지만 tokenizer로 기사를 읽고 있기 때문에 제대로 작동하지 않는 것처럼 보일 수 없다. 그래서 저는 다음과 같은 것을 가지고 있습니다 :nextElement에서 명령 분할

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; 
} 

어떻게하면 전체 기사 대신 첫 번째 문장 만 인쇄 할 수 있습니까? 구분 기호 "."로 분리 할 수 ​​있다고 상상하지만 코드가 제대로 작동하지 않습니다. 감사.

+0

문장이 파이프 문자''| "'로 분리되어 있습니까? 그렇지 않다면'새로운 StringTokenizer (s, "|")'로 당신의 의도는 무엇입니까? – Bohemian

+0

기사 자체는 .txt로되어 있으며 정보는 "|" 구분 기호. 따라서 첫 번째 토크 나이저는 제목, 기사, 발행일 및 개별 기사와 관련된 jpg 이름을 나눕니다. 모든 것은 올바르게 나오지 만 전체 기사를 인쇄합니다. 여기서는 첫 번째 문장 (이 경우 s2.nextElement는 기사 자체)을 인쇄하고 싶습니다. – Student

+0

기사가 파이프 문자로 구분 된 단일 파일이지만 각 기사 내에서 정확히 필드 란 무엇이며 어떻게 구분됩니까? – Bohemian

답변

0

hasMoreTokens()에 hasMoreElements()가 변경되었습니다. 나는 그 때 처음으로 "."을 발견했다. 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() 전체 라인을 읽습니다 (기본값 구분 기호는 개행 문자 (들)입니다).

split("\\s*\\|\\s*")은 파이프 숯 (파이프 숯에 특별한 정규식 의미가 있기 때문에 이스케이프 처리해야 함)을 사용하고 파이프 문자를 둘러 쌀 수있는 공백을 사용합니다 (\s*).