2010-06-28 1 views
1

Я хочу найти в строке строку «< ','> ') в строке, посчитать их и получить свои позиции в java. Моя строка, как показано нижеПоиск Подстановочный знак ('<', '>'), посчитайте его и получите позицию в java

< Питер 5554> Джон < 5556>,

какую функцию следует использовать? Спасибо.

ответ

3

Вы должны использовать Pattern и Matcher:

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> 
+0

хорошего решение, хотя ОП не прошу postions этого шаблона, но для позиции из '<' and '>' символов (но, возможно, вы решили, что он * действительно * смотрит на;)) –

+0

Спасибо всем. Я использую Pattern. = D True Soft, могу я узнать больше, как сделать регулярное выражение? – soclose

+0

См. Http://www.regular-expressions.info/. В этом случае '<' означает, что вы смотрите '<'; '[^>]' означает символ, который не является '>'; '*' для ноль или более символов, а '>' соответствует '>'. Если ваш контент сформирован одной или несколькими цифрами, вы можете использовать '<\d+>'. В java вы должны избегать обратной косой черты: '" <\\d+> ". –

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

Вы можете реализовать его с повторными 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 
} 
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)); 
    } 
}