Java '之间的子字符串';象征

Java '之间的子字符串';象征,java,Java,我想获取介于'和'之间的url。这是我尝试的,它给出的字符串索引超出范围:-1错误 String html = "<img src='http://res.cloudinary.com/test/image/upload/v1/testFolder/1024x1024.jpg'/>"; html.substring((html.indexOf("'")), html.indexOf("'")); String html=”“; substring((html.indexOf(“”

我想获取介于
'
'
之间的url。这是我尝试的,它给出的字符串索引超出范围:-1错误

String html = "<img src='http://res.cloudinary.com/test/image/upload/v1/testFolder/1024x1024.jpg'/>";

html.substring((html.indexOf("'")), html.indexOf("'"));
String html=”“;
substring((html.indexOf(“”),html.indexOf(“”);
我还尝试了
html.substring((html.indexOf(“”))+1,html.indexOf(“”)


如何获取
'
'
之间的url?

您必须将html.indexOf(“”)更改为html.lastIndexOf(“”)

试试看:

public static void main(String[] args) throws ClassNotFoundException {
    String html = "<img src='http://res.cloudinary.com/test/image/upload/v1/testFolder/1024x1024.jpg'/>";

    System.out.println(html.substring(html.indexOf("'") + 1, html.lastIndexOf("'")));
}
publicstaticvoidmain(字符串[]args)抛出ClassNotFoundException{
字符串html=“”;
System.out.println(html.substring(html.indexOf(“”)+1,html.lastIndexOf(“”));
}

您必须将html.indexOf(“”)更改为html.lastIndexOf(“”)

试试看:

public static void main(String[] args) throws ClassNotFoundException {
    String html = "<img src='http://res.cloudinary.com/test/image/upload/v1/testFolder/1024x1024.jpg'/>";

    System.out.println(html.substring(html.indexOf("'") + 1, html.lastIndexOf("'")));
}
publicstaticvoidmain(字符串[]args)抛出ClassNotFoundException{
字符串html=“”;
System.out.println(html.substring(html.indexOf(“”)+1,html.lastIndexOf(“”));
}

您需要保留第一个索引,以便在该点之后搜索下一个索引

int idx = html.indexOf("'") + 1;
int idx2 = html.indexOf("'", idx); // this will find the next ' character

System.out.println(html.substring(idx, idx2));

您需要保留第一个索引,以便可以搜索超出该点的下一个索引

int idx = html.indexOf("'") + 1;
int idx2 = html.indexOf("'", idx); // this will find the next ' character

System.out.println(html.substring(idx, idx2));

您还可以使用正则表达式模式

Pattern p = Pattern.compile("'(.*?)'");
Matcher m = p.matcher(html);
m.find();
m.group(1); // will return http://res.cloudinary.com/test/image/upload/v1/testFolder/1024x1024.jpg

您还可以使用正则表达式模式

Pattern p = Pattern.compile("'(.*?)'");
Matcher m = p.matcher(html);
m.find();
m.group(1); // will return http://res.cloudinary.com/test/image/upload/v1/testFolder/1024x1024.jpg

为什么给定字符的
indexOf
会给你不同的结果?好吧,你已经得到了答案,但是Javadocs(通常)是你的朋友。请记住:为什么给定字符的
indexOf
会给你不同的结果?好吧,你已经得到了答案,但是Javadocs(通常)是你的朋友请记住:谢谢你的详细回答。写
+1
的目的到底是什么?你应该自己试试,看看会发生什么!但答案是,如果你没有+1,它会再次找到相同的“字符”。这并不能回答OP的观察结果,即他得到了一个越界异常:-1.它不应该是
System.out.println(html.substring(idx+1,idx2))
或者最好在第一行添加
+1
?谢谢您的详细回答。写
+1
的目的到底是什么?你应该自己试试,看看会发生什么!但答案是,如果你没有+1,它会再次找到相同的“字符”。这并不能回答OP的观察结果,即他得到了一个越界异常:-1.它不应该是
System.out.println(html.substring(idx+1,idx2))
或者最好在第一行加上
+1
?谢谢你的回答。我们需要使用
lastIndexOf
来查找第二个,正如我从您的答案中所了解的。是的,您将得到介于第一个“和最后一个”之间的字符串。谢谢您的回答。我们需要使用
lastIndexOf
来查找第二个,正如我从您的答案中了解到的。是的,您将得到第一个“和最后一个”之间的字符串