Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试从长字符串获取字符串时出现StringIndexOutOfBoundsException_Java_Android_String_Substring - Fatal编程技术网

Java 尝试从长字符串获取字符串时出现StringIndexOutOfBoundsException

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

我试图从长字符串(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前后都有欠分。我正试图得到那个名字,但我得到了

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呢。这件事很棘手,可能对像我这样的人也有帮助。非常感谢