如何在不知道确切子字符串的情况下搜索 SpannableString
How to search a SpannableString without knowing the exact substring
我想搜索一个 spannable 字符串以找到某个子字符串的索引,我不知道该子字符串的长度或确切字符,例如 [size=??]
其中问号可以是任何字符或任何子字符串长度。如果可能的话我也想知道找到这样一个字符串的长度。
(edit) 示例:
如果给出了 "string [size=212] more string"
之类的字符串,我希望它成为 return 索引,所以在这种情况下 7
和 [size=212]
的长度,在这种情况下 10
您需要使用正则表达式来提取子字符串。
得到它后,使用函数 indexOf 搜索匹配,这将为您提供子字符串出现的第一个索引。
注意:请详细说明您的问题
您可以使用 Pattern 和 Matcher.
来完成这项工作
public class Main
{
public static void main(String[] args)
{
String str = "string [size=212] more string [size=212] more string here";
Pattern pat = Pattern.compile("\[size=[0-9]+\]");
Matcher mat = pat.matcher(str);
int index, lastIndex = 0, length, value;
while(mat.find()) {
final String found = mat.group(0);
value = Integer.parseInt(found.replaceAll("^\[size=|\]$", ""));
length = found.length();
index = str.indexOf(found, lastIndex);
lastIndex += length;
System.out.printf("index: %d, length: %d, string: %s, value: %d%n", index, length, found, value);
}
}
}
输出:
index: 7, length: 10, string: [size=212], value: 212
index: 30, length: 10, string: [size=212], value: 212
我想搜索一个 spannable 字符串以找到某个子字符串的索引,我不知道该子字符串的长度或确切字符,例如 [size=??]
其中问号可以是任何字符或任何子字符串长度。如果可能的话我也想知道找到这样一个字符串的长度。
(edit) 示例:
如果给出了 "string [size=212] more string"
之类的字符串,我希望它成为 return 索引,所以在这种情况下 7
和 [size=212]
的长度,在这种情况下 10
您需要使用正则表达式来提取子字符串。 得到它后,使用函数 indexOf 搜索匹配,这将为您提供子字符串出现的第一个索引。
注意:请详细说明您的问题
您可以使用 Pattern 和 Matcher.
来完成这项工作public class Main
{
public static void main(String[] args)
{
String str = "string [size=212] more string [size=212] more string here";
Pattern pat = Pattern.compile("\[size=[0-9]+\]");
Matcher mat = pat.matcher(str);
int index, lastIndex = 0, length, value;
while(mat.find()) {
final String found = mat.group(0);
value = Integer.parseInt(found.replaceAll("^\[size=|\]$", ""));
length = found.length();
index = str.indexOf(found, lastIndex);
lastIndex += length;
System.out.printf("index: %d, length: %d, string: %s, value: %d%n", index, length, found, value);
}
}
}
输出:
index: 7, length: 10, string: [size=212], value: 212
index: 30, length: 10, string: [size=212], value: 212