在Java中解析起始和结束字符串

在Java中解析起始和结束字符串,java,string,parsing,webpage,Java,String,Parsing,Webpage,我很难找到任何关于我需要对Java字符串进行解析的文档 所以,它不是简单的像用行或逗号之类的东西来解析,它有点复杂 我的程序获取一个网页的源代码,我需要解析它以获取视图标签的内容 类似于分析它之间的内容 <input name="sid" type="hidden" value=" 因此,如果网页有以下字符串: <input name="sid" type="hidden" value="stringvaluehere" /> 有人能帮忙吗?我还没有找到任何类似的文档,四处

我很难找到任何关于我需要对Java字符串进行解析的文档

所以,它不是简单的像用行或逗号之类的东西来解析,它有点复杂

我的程序获取一个网页的源代码,我需要解析它以获取视图标签的内容

类似于分析它之间的内容

<input name="sid" type="hidden" value="
因此,如果网页有以下字符串:

<input name="sid" type="hidden" value="stringvaluehere" />
有人能帮忙吗?我还没有找到任何类似的文档,四处询问其他来源也无济于事


谢谢

如果您想解析HTML,我建议使用HTML解析器,而不是使用字符串操作。当您遇到意想不到的奇怪输入时,将文档解析为字符串只是在询问问题


这个问题讨论了一些优秀的Java HTML解析器:

如果您想解析HTML,我建议使用HTML解析器,而不是使用字符串操作。当您遇到意想不到的奇怪输入时,将文档解析为字符串只是在询问问题


这个问题讨论了一些优秀的Java HTML解析器:

这有点笨手笨脚,可能有一个非常酷和古怪的regexp可以做得更好,但是

String value = "<input name=\"sid\" type=\"hidden\" value=\"stringvaluehere\" />";
value = value.substring(value.indexOf("value=\"") + "value=\"".length());
value = value.substring(0, value.indexOf("\""));
System.out.println(value);
字符串值=”;
value=value.substring(value.indexOf(“value=\”)+“value=\”.length());
value=value.substring(0,value.indexOf(“\”);
系统输出打印项次(值);
在此处打印
stringvalues

更新

另一种方法是将HTML文本视为XML,并使用XML解析器查找元素的属性。虽然听起来很复杂,但这是一种更简单的解决方案,尤其是当您倾向于解析多个网页时


有两种可能会有帮助的解决方案是和这是一个有点笨手笨脚的方法,可能有一个非常酷和古怪的regexp可以做得更好,但是

String value = "<input name=\"sid\" type=\"hidden\" value=\"stringvaluehere\" />";
value = value.substring(value.indexOf("value=\"") + "value=\"".length());
value = value.substring(0, value.indexOf("\""));
System.out.println(value);
字符串值=”;
value=value.substring(value.indexOf(“value=\”)+“value=\”.length());
value=value.substring(0,value.indexOf(“\”);
系统输出打印项次(值);
在此处打印
stringvalues

更新

另一种方法是将HTML文本视为XML,并使用XML解析器查找元素的属性。虽然这听起来很复杂,但它是一个更简单的解决方案,尤其是当您倾向于解析多个网页时


两种可能有用的解决方案是和

如果页面是格式良好的XML,您可以为此使用XPATH查询语言。它是比低lvl regexp匹配更干净的解决方案。或者一些用于解析HTML的现有库。

如果页面是格式良好的XML,则可以使用XPATH查询语言来实现此目的。它是比低lvl regexp匹配更干净的解决方案。或者一些用于解析HTML的现有库。

您可以为此使用库,例如。这通常比手动解析DOM容易得多

Document doc = Jsoup.connect("http://www.example.com").get();
Elements inputs = doc.select("input#sid");
for(Element input : inputs) {
    System.out.println(input.attr("value"));
}

简单易用&重要的是易于阅读。

您可以使用库来实现这一点,例如。这通常比手动解析DOM容易得多

Document doc = Jsoup.connect("http://www.example.com").get();
Elements inputs = doc.select("input#sid");
for(Element input : inputs) {
    System.out.println(input.attr("value"));
}

简单易用,重要的是易于阅读。

为什么?抓取web几乎总是比它的价值更麻烦。您可以尝试使用java xml解析器。看看javax.xml.parsers.SAXParserWhy中的saxparser?抓取web几乎总是比它的价值更麻烦。您可以尝试使用java xml解析器。看看javax.xml.parsers.SAXParserOh中的saxparser哇,这看起来非常简单。非常感谢您的帮助,从现在起,我很可能会使用该库来处理这类事情!哦,还有一个问题:获取输入值的“#sid”部分似乎不起作用。当我将其保留为普通输入时,它会转储页面上的所有输入值。你知道有没有办法把它缩小到一个值,通过名字或者别的什么?我想尽一切办法,但是我在网上也找不到。对不起,刚才看到了你的评论!上面认为您使用的ID是
sid
,但实际上您使用的是名称属性。如果使用ID,则可以使用带有哈希(磅)符号的选择器,但如果要保留名称,则应使用
input[name=sid]
。需要注意的是,为了获得良好的可访问性,
input
元素也应该使用ID。(例如,
Test
-
bar
将是已通过的命名参数,但
foo
ID将其与其标签相关联)。更多CSS选择器,请参见。哇,这看起来非常简单。非常感谢您的帮助,从现在起,我很可能会使用该库来处理这类事情!哦,还有一个问题:获取输入值的“#sid”部分似乎不起作用。当我将其保留为普通输入时,它会转储页面上的所有输入值。你知道有没有办法把它缩小到一个值,通过名字或者别的什么?我想尽一切办法,但是我在网上也找不到。对不起,刚才看到了你的评论!上面认为您使用的ID是
sid
,但实际上您使用的是名称属性。如果使用ID,则可以使用带有哈希(磅)符号的选择器,但如果要保留名称,则应使用
input[name=sid]
。需要注意的是,为了获得良好的可访问性,
input
元素也应该使用ID。(例如,
Test
-
bar
将是已通过的命名参数,但
foo
ID将其与其标签相关联)。有关更多CSS选择器,请参阅。谢谢!我很可能会使用JSoup库,但是这个链接仍然非常有用。谢谢!我很可能会使用JSoup库,但是这个链接仍然非常有用。谢谢你的代码snippit,是的,我一直认为会有一些帮助