Java 尝试从长字符串获取字符串时出现StringIndexOutOfBoundsException
我试图从长字符串(Firebase URL)中获取字符串Java 尝试从长字符串获取字符串时出现StringIndexOutOfBoundsException,java,android,string,substring,Java,Android,String,Substring,我试图从长字符串(Firebase URL)中获取字符串 "https://firebasestorage.googleapis.com/v0/b/No-manworld-3577.appspot.com/o/Contacts%2F1510361061636_Julien_Vcf?alt=media&token=c0bff20d-d115-4fef-b58c-4c7ffaef4296" 现在,如果您注意到上面字符串中nameJulien前后都有欠分。我正试图得到那个名字,但我得到了 j
"https://firebasestorage.googleapis.com/v0/b/No-manworld-3577.appspot.com/o/Contacts%2F1510361061636_Julien_Vcf?alt=media&token=c0bff20d-d115-4fef-b58c-4c7ffaef4296"
现在,如果您注意到上面字符串中nameJulien前后都有欠分。我正试图得到那个名字,但我得到了
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
这是我的一段代码
String s="https://firebasestorage.googleapis.com/v0/b/No-manworld-3577.appspot.com/o/Contacts%2F1510361061636_Julien_Vcf?alt=media&token=c0bff20d-d115-4fef-b58c-4c7ffaef4296";
String newName=s.substring(s.indexOf("_")+1, s.indexOf("_"));
System.out.println(newName);
正如我在评论中所说,当使用子字符串时,第一个数字必须小于第二个数字 在本例中,您使用
x+1
和x
调用子字符串x+1
x
因此子字符串失败,x
为s.indexOf(“”)
我知道您正在尝试获取\uuu
的信息
以下是在您的情况下产生Julien的代码:
String s = "...";
int start = s.indexOf("_") + 1;
int end = s.indexOf("_", start);
// name will hold the content of s between the first two `_`s, assuming they exist.
String name = s.substring(start, end);
如果需求不清楚要选择哪一个2
,那么这里是Java 8流方式
public class Check {
public static void main(String[] args) {
String s = "https://firebasestorage.googleapis.com/v0/b/No-manworld-3577.appspot.com/o/Contacts%2F1510361061636_Julien_Vcf?alt=media&token=c0bff20d-d115-4fef-b58c-4c7ffaef4296";
long count = s.chars().filter(ch -> ch == '_').count();
if (count == 2) {
System.out.println(s.substring(s.indexOf('_') + 1, s.lastIndexOf('_')));
} else {
System.out.println("More than 2 underscores");
}
}
}
为什么您的代码不起作用?
假设s.indexOf(“”)
得到一些正数,比如10
,然后下面翻译成
String newName=s.substring(s.indexOf("_")+1, s.indexOf("_"));
String newName=s.substring(11, 10);
这将为subString
方法提供StringIndexOutOfBoundsException
作为endIndex
。使用subString时,第一个数字必须小于第二个数字。在本例中,您使用x+1
和x
调用子字符串<代码>x+1>x
因此子字符串失败<代码>--EDITx是s.indexOf(“\u”)
@nicovank您能否详细说明您的评论,因为答案s.indexOf(“\u”)
是99。您基本上是在调用s.substring(99+1,99)
,而substring的第二个参数必须大于第一个参数。我更改了(s.indexOf(“))、s.indexOf(“”)+1)
,但现在结果为空。如果你看到很多与这个问题相关的问题和答案(和我尝试过的一样),但在我的案例中它不起作用,那么我怎么能把Julien命名为Strings呢。这件事很棘手,可能对像我这样的人也有帮助。非常感谢