当前位置: 首页 > 知识库问答 >
问题:

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

田博易
2023-03-14

我尝试从长字符串中获取字符串,该字符串是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"

现在,如果您注意到上面字符串中姓名朱利安之前和之后的分数不足。我试图得到这个名字,但我正在得到

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);

共有2个答案

裴宜春
2023-03-14

如果不清楚选择哪一个2_,那么这里是Java8Stream的方法。。

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);

这将使StringIndexOutOfBoundsException作为endIndex

邵君植
2023-03-14

正如我在评论中所说,当使用子字符串时,第一个数字必须小于第二个数字。

在您的例子中,您使用x1和x调用子字符串<代码>x 1

我知道您正在尝试获取 _的第二个索引

下面是在您的情况下会产生< code>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);
 类似资料:
  • 我试图从以下URL获取json字符串:http://status.mojang.com/check 感谢任何帮助

  • 在这个问题之前,我先要说明一个事实,那就是我学习编程才一个月,而这个学校的作业却把我难住了。具体地说,它是摩尔斯电码到英语翻译器(反之亦然)...这是我被困住的部分:

  • 为什么我在字符串开始时获得额外的而在字符串之间获得 我在期待:

  • 问题内容: 你如何得到一个的长度?例如,我有一个定义如下的变量: 但是,我似乎无法在字符串上找到长度方法。 问题答案: 自Swift 4+起 只是: 原因。 (感谢Martin R) 从Swift 2开始: 在Swift 2中,Apple已将全局功能更改为协议扩展,这些扩展可与符合协议的任何类型匹配。因此,新语法为: (感谢JohnDifool的注意) 从Swift 1开始 使用计数字符方法: 直

  • 在 Java 中, 要获取字符串的长度,可以使用 String 类的 length() 方法,其语法形式如下: 例 1 在学生信息管理系统中对管理员密码有这样的规定,即密码长度必须大于 6 位且小于 12 位。因为密码太短容易被破解,太长的话又不容易记住。这就需要首先获取用户输入的密码字符串,然后调用 length() 方法获取长度,再做进一步的长度判断,最终实现代码如下所示: 上述代码将用户输入