我想在字符串中搜索Wildcard('<','>'),计算它们并在java中获取它们的位置。我的字符串如下所示
Peter< 5554>,John< 5556>,
我应该使用哪个功能?谢谢。
答案 0 :(得分:3)
Pattern pattern = Pattern.compile("<[^>]*>");
Matcher matcher = pattern.matcher("Peter <5554>, John <5556>,");
while (matcher.find()) {
System.out.println("index="+matcher.start()+" - "+matcher.group());
}
输出:
index=6 - <5554>
index=19 - <5556>
答案 1 :(得分:2)
一种解决方案是使用String.indexOf()。你可以这样做:
String s = "Peter <5554>, John <5556>";
List<Integer> posGt = new ArrayList<Integer>();
int i = 0;
while((i = s.indexOf('>', i)) != -1) {
posGt.add(i++);
}
...
//the same for <
答案 2 :(得分:2)
您可以使用重复的indexOf
和substring
:
String s = "Peter <5554>, John <5556>,"
int count = 0;
ArrayList<Integer> positions = new ArrayList<Integer>();
int cut = 0;
while(true) {
// search for <
int index = s.indexOf('<');
if (index < 0)
break;
// search for >
int index2 = s.indexOf('>');
if (index2 < 0)
break; // or throw exception
// update count and positions
count++;
positions.add(index+cut);
s = s.substring(index2+1);
cut += index2+1; // used to compute the initial position since we're cutting the string
}
答案 3 :(得分:0)
使用indexOf
重复fromIndex
看起来是个不错的解决方案。替代方案是迭代字符串并使用charAt
(可以说是显而易见的解决方案,如果只有java具有合理的字符串索引):
String s = "Peter <5554>, John <5556>,";
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '<' || s.charAt(i) == '>') {
System.out.printf("index %d - %s\n", i, s.charAt(i));
}
}