使用lastindexOf的Java子字符串返回特定长度

时间:2018-09-25 16:16:32

标签: java string substring lastindexof

我正在使用JAVA,并且有一个名为example的字符串,看起来像;

example = " id":"abcd1234-efghi5678""tag":"abc" "

注意:我并没有使用\来逃避“,但您明白了。

...我想回来;

abcd1234

...我一直在尝试使用子字符串

example = (example.substring(example.lastIndexOf("id\":\"")+5));

(因为此字符串可能在HTML / JSON文件中的任何位置),lastIndexOf所做的所有工作都是找到它,然后将其保留所有内容-即它返回;

abcd1234-efghi5678“”标签“:” abc“

基本上,我需要根据字符串找到lastIndexOf并限制其之后返回的值-我发现我可以用另一个子字符串命令来做到这一点;

example = (example.substring(example.lastIndexOf("id\":\"")+5));
example = example.substring(0,8);

...但是看起来很乱。有没有办法使用lastIndexOf并同时设置最大长度-可能是因为盯着它看了这么长时间,所以我看不到它。

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

不要substring两次。使用找到的索引两次:

int idx = example.lastIndexOf("id\":\"");
example = example.substring(idx + 5, idx + 13);

或者,如果长度是动态的,但是总是以-结尾:

int start = example.lastIndexOf("id\":\"");
int end = example.indexOf('-', start);
example = example.substring(start + 5, end);

在实际代码中,您当然应该始终检查是否完全找到了子字符串,即idx / start / end不是-1

答案 1 :(得分:0)

您可以使用正则表达式查找特定的子字符串:

String regex = "^id[^a-z0-9]+([a-zA-Z0-9]+)-.*$";
Matcher p = Pattern.compile(regex).matcher(example);

String result = null;
if (p.matches()) {
    result = p.group(1);
}

System.out.println(result); //outputs exactly "abcd1234"

此模式使用的捕获组与id匹配,后跟非字母数字字符并在-之前。