【问题标题】:How to use indexOf in Java如何在 Java 中使用 indexOf
【发布时间】:2012-03-29 20:31:46
【问题描述】:

我正在尝试从以下 html 中解析标题:

"Website (Newton) at datanucleus.org">Website</a></div>

我正在使用indexOfstrLine.indexOf("\"&gt;Website")

我想知道如何搜索链接之前出现的第一个空格。所以我想捕获“”和“>Website

datanucleus.org

有什么想法吗?谢谢!

【问题讨论】:

  • 根据您所处情况的复杂程度,您可能需要考虑使用适当的 HTML 解析器。无论如何,更好地学习字符串函数。这是一个相对简单的事情。只需计算要传递子字符串的索引。
  • 强烈同意@Corbin 关于使用 HTML 解析器的观点,但如果你要坚持基础,你应该开始考虑使用正则表达式。
  • 罗杰,我会调查的。不确定这是简单的还是那些棘手的事情之一。
  • 请注意,如果您尝试进行字符串匹配而不使用真正的解析器进行完整解析,您有时会出错 - 例如,您可能会匹配已被注释掉的内容,或者如果属性在单引号而不是双引号中,则无法匹配内容。

标签: java html xml parsing rss


【解决方案1】:

如果你有 int idx = str.indexOf("\">Website"),你可以使用 String.lastIndexOf(" ", idx); 来获取之前的空格。然后使用 substring!

【讨论】:

    【解决方案2】:

    我想这就是你想要的:

    int end = strLine.indexOf("\">Website");
    int start = strLine.lastIndexOf(" ", end);
    

    来自lastIndexOf的文档:

    返回此字符串中指定子字符串最后一次出现的索引,从指定索引开始向后搜索。

    还有一个版本的lastIndexOf 采用char 而不是字符串;在这种特殊情况下可能会更有效(但我没有检查过):

    int start = strLine.lastIndexOf(' ', end);
    

    对于更复杂的事情,您还可以考虑查看 java.util.regex 包。

    【讨论】:

    • 这将搜索出现在 end 之后的最后一个空格。 OP 想要最后一个空格 before end.
    • @Ted Hopp:你确定吗?我测试了它(见:pastebin.com/2qvH5bfQ),我得到了这个输出:end: 36;开始:20
    • 我还没有尝试过,但我认为这应该可以。经过快速搜索,我自己找到了这个答案:)。泰德,我认为你错了,但我会尝试。
    • 我的错误。它确实从指示的索引向后搜索。
    【解决方案3】:

    正则表达式方法可能是最有效的。但是,您可以通过 indexOflastIndexOfsubstring 调用的组合来执行此操作。

    int end = strLine.indexOf("\"Website");
    int blank = strLine.substring(0, end).lastIndexOf(' ');
    String interestingStuff = strLine.substring(blank + 1, end);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多