"String Index Out Of Range" Error
Rob Beckett <[email protected]> Sat, 05 Feb 2005 02:31:05 -0700
| Newsgroups | gmane.comp.jakarta.regexp.user |
|---|---|
| Message-ID | <[email protected]> |
Hi!
I've struggled over this one for quite a while, and I'm hitting rock
bottom, so I've joined the mailing list to appeal to you for help, and
perhaps in future offer some help of my own. :)
The code I'm working with involves the indexing spiders for
blogshares.com, a virtual stock market utilizing weblogs as companies.
Jakarta Regexp has been in use for some time to verify the URLs of blogs
added to the system, and perform additional tasks on those blogs as
needed. Recently I added Regexp functions to the main link parser class
itself, in this case taking a Vector of links from a parsed HTML page
and running each one through a RE match for validity/checking before
performing database comparisons. However, in doing that, the spiders'
log (powered by Log4J!) began including some rather perplexing errors,
two examples are included here. It happens on average every five
minutes, and I'm rather stumped. :-/
The expression used in each case is initialized by:
---snip---
private static RE urlcheck = new
RE("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
---snip---
1. Attempting the main RE match against the 'href' string, which does
not occur if the string is empty or does not meet other criteria in advance.
---snip---
java.lang.StringIndexOutOfBoundsException: String index out of range: 58
at java.lang.String.charAt(String.java:444)
at org.apache.regexp.StringCharacterIterator.charAt(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchNodes(Unknown Source)
at org.apache.regexp.RE.matchAt(Unknown Source)
at org.apache.regexp.RE.match(Unknown Source)
at org.apache.regexp.RE.match(Unknown Source)
at org.apache.regexp.RE.match(Unknown Source)
at com.blogshares.bot.LinkParser.parse(LinkParser.java:667)
at com.blogshares.bot.LinkParser.workerThread(LinkParser.java:1007)
at com.blogshares.bot.LinkParser.run(LinkParser.java:1193)
at java.lang.Thread.run(Thread.java:534)
---snip---
The input string:
---snip---
http://doorknot.blogspot.com/2005/01/shady-in-de-alpen.html#comments
---snip---
LinkParser.java:667:
---snip---
boolean validURL = urlcheck.match(href);
---snip---
2. Attempting to retrieve the fifth parenthesized group from the matched
URL.
Error Log:
---snip---
java.lang.StringIndexOutOfBoundsException: String index out of range: -14
at java.lang.String.substring(String.java:1444)
at org.apache.regexp.StringCharacterIterator.substring(Unknown
Source)
at org.apache.regexp.RE.getParen(Unknown Source)
at com.blogshares.bot.LinkParser.parse(LinkParser.java:679)
at com.blogshares.bot.LinkParser.workerThread(LinkParser.java:1007)
at com.blogshares.bot.LinkParser.run(LinkParser.java:1193)
at java.lang.Thread.run(Thread.java:534)
---snip---
The input string:
---snip---
http://roseqoloredlenses.blogspot.com/atom.xml
---snip---
LinkParser.java:679:
---snip---
String hrefPath = urlcheck.getParen(5);
---snip---
This is a multi-threaded application, running on the J2SDK V1.4.2 &
Jakarta Regexp V1.3, tested on more than one box with the same results.
Any ideas?
Thanks & your time is appreciated,
Rob Beckett
http://www.blogshares.com/
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.8.5 - Release Date: 2/3/2005