【问题标题】:String Index Out Of Bounds Exception [duplicate]字符串索引越界异常[重复]
【发布时间】:2011-07-16 09:05:04
【问题描述】:

我真的被这个异常困住了

private static void getUserComment(String s) {
    while(s.contains("author'>")){
        System.out.println(s.substring(s.indexOf("author'>"),
                                       s.indexOf("<div id='")));
        s = s.substring(0, s.indexOf("author'>")) +
                           s.substring(s.indexOf("<div id='"+9));

    } 
}

【问题讨论】:

  • 你的输入字符串是什么样的?
  • 哪一行导致异常?
  • 打印和子字符串语句似乎都产生了这个异常
  • 输入是一个 html 页面,基本上是这个 UR:Lhttp://sabq.org/sabq/user/news.do?section=5&id=20908 我试图提取有用的信息,例如用户名以及评论者的评论,不知道这样做对不对?
  • 获取适当的 HTML 解析器,将页面加载到 DOM 中,然后查询 DOM(例如,如果支持,则使用 XPath)。 HTML Parser 开源项目可能会对您有所帮助。

标签: java exception indexoutofboundsexception


【解决方案1】:

您应该使用适当的解析器或至少进行一些正则表达式模式匹配(这对于 HTML 或 XML 来说已经“够糟糕了”)。

也就是说,您的“偏移量”为 9 可能是异常的间接原因:

s.indexOf("<div id='"+9)

这将生成一个未找到的文字字符串&lt;div id='9indexOf 然后返回 -1,这会导致 substring 方法中的异常。也许您想像这样将 9 添加到索引中? s.indexOf("&lt;div id='")+9

注意这个函数无论如何都没用,改变s只会改变局部变量而不是原始变量(参数在Java中是按值的)。

【讨论】:

  • 我想要的是剪切作者信息并使用它并找到下一个作者并从字符串中剪切他的信息,所以一段时间后我最终会没有作者......我不'对模式匹配一​​无所知,这是提取信息的好方法吗?
  • @Nayef - 有很多关于模式匹配的资源。甚至书籍。正如@Lucero 所说,它会起作用(大部分时间)。但是一个合适的 HTML 解析器是一个更好的主意。
  • 正如我所写,使用适当的解析器。 HTML Parser 开源项目可能适合您的提取需求(但周围还有其他项目)。
  • 老实说这是第一次听说 DOM,我应该读什么 DOM 或者使用 HTML Parser?
  • DOM 代表“文档对象模型”,它不是一段特定的代码,而是文档的已解析分层对象表示模型的通用名称。
猜你喜欢
  • 1970-01-01
  • 2019-08-01
  • 2013-12-08
  • 2014-10-16
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多