Avatar billede baitianlong Nybegynder
10. december 2007 - 14:24 Der er 1 kommentar og
1 løsning

Tekst uddrag og highlight m.v. problemer

Jeg har en masse tekst hvor ordet malaysia indgaar hist og her. Jeg oensker at faa tekstbidder, som giver mig 50 bogstaver foer og efter malaysia i teksten. Jeg har skrevet denne metode:

public static ArrayList<String> processMalaysiaText(String text) {

        ArrayList<String> results = new ArrayList<String>();
        List strpos = new ArrayList();

        for(int i = 0; i < text.length() - 8; i++) {
            if(text.substring(i, 8).toLowerCase().equals("malaysia")) {
                strpos.add(i);   
            }
        }
        for(int i = 0; i < strpos.size(); i++) {
            int pos = Integer.parseInt(strpos.get(i).toString());
            int startpos = pos - 50;
            int endpos = pos + 57;
            String str = MiscFunctions.highlightTerm(text.substring(startpos, endpos), "malaysia");
            str = MiscFunctions.highlightTerm(str, "Malaysia");
            str = MiscFunctions.highlightTerm(str, "MALAYSIA");
            results.add(str);
        }
        return results;
    }

Men jeg faar en StringIndexOutOfBoundsException med -1 i den linie, som staar efter det foerste for-loop. Det fatter jeg ikke...
Avatar billede baitianlong Nybegynder
10. december 2007 - 14:35 #1
Jeg har proevet at teste med dette:

<%
      String text = "sd fdsfkj lkfjdljs dklskj dfs  lkdjfs dlkjfls slkdsj ldkdjf dslkjf malaysia  dslkfsdlkds ds dslkjls flkdjs flkdj sf malaysia s flskfj fds df lkdsjf d f sflksjf sf  ff f  lkdsflksdlk fdlkjslkfjd f Malaysia  slkfljf s s sldkjf s";
      ArrayList<String> list = DatabaseAction.processMalaysiaText(text);
      for(String s: list) {
          out.write(s + "<br><br>");
      }
  %>

men faar denne fejl:

org.apache.jasper.JasperException: Exception in JSP: /test.jsp:13

10:  <body>
11:  <%
12:      String text = "sd fdsfkj lkfjdljs dklskj dfs  lkdjfs dlkjfls slkdsj ldkdjf dslkjf malaysia  dslkfsdlkds ds dslkjls flkdjs flkdj sf malaysia s flskfj fds df lkdsjf d f sflksjf sf  ff f  lkdsflksdlk fdlkjslkfjd f Malaysia  slkfljf s s sldkjf s";
13:      ArrayList<String> list = DatabaseAction.processMalaysiaText(text);
14:      for(String s: list) {
15:          out.write(s + "<br><br>");
16:      }


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    java.lang.String.substring(Unknown Source)
    use.DatabaseAction.processMalaysiaText(DatabaseAction.java:143)
    org.apache.jsp.test_jsp._jspService(test_jsp.java:61)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java


Linie 143 er som naevnt denne linie:

if(text.substring(i, 8).toLowerCase().equals("malaysia")) {
Avatar billede baitianlong Nybegynder
10. december 2007 - 15:46 #2
naa, den er fikset nu :)

public static ArrayList<String> processMalaysiaText(String text) {

        ArrayList<String> results = new ArrayList<String>();
        List strindex = new ArrayList();

        int pos = text.toLowerCase().indexOf("malaysia",0);
        while (pos >= 0) {
            strindex.add(pos);
            pos = text.toLowerCase().indexOf("malaysia",pos+7);
        }

        for(int j = 0; j < strindex.size(); j++) {
            int strpos = Integer.parseInt(strindex.get(j).toString());
            int startpos = strpos - 50;
            int endpos = strpos + 57;
            if(endpos > text.length()) endpos = text.length();
            String str = MiscFunctions.highlightTerm(text.substring(startpos, endpos), "malaysia");
            str = MiscFunctions.highlightTerm(str, "Malaysia");
            str = MiscFunctions.highlightTerm(str, "MALAYSIA");
            results.add(str);
        }
        return results;
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester