2015-04-06 2 views
1

Я ищу элегантный способ найти первое появление одного из множества разделителей.Как получить indexOf несколько разделителей?

Например, допустим, что мой разделительный набор состоит из {";",")","/"}.

Если моя строка является
"aaa/bbb;ccc)"
Я хотел бы получить результат 3 (индекс "/", так как он является первым появляться).

Если моя строка является
"aa;bbbb/"
Я хотел бы получить результат 2 (индекс ";", так как он является первым появляться).

и так далее.

Если строка не содержит разделителя, я хотел бы вернуть -1.

Я знаю, что могу это сделать, сначала найдя индекс каждого разделителя, а затем вычислив минимум индексов, не считая -1. Этот код становится очень громоздким. Я ищу более короткий и более общий способ.

+0

Вместо того, чтобы пытаться найти каждый разделитель один на один, было бы более эффективным для перебора символов строки, и тест, если каждый символ является одним из разделителей , Или вы можете использовать регулярное выражение. –

ответ

8

через регулярное выражение, это woud быть сделано, как это,

String s = "aa;bbbb/"; 
Matcher m = Pattern.compile("[;/)]").matcher(s); // [;/)] would match a forward slash or semicolon or closing bracket. 
if(m.find())          // if there is a match found, note that it would find only the first match because we used `if` condition not `while` loop. 
{ 
    System.out.println(m.start());     // print the index where the match starts. 

} 
else 
{ 
    System.out.println("-1");      // else print -1 
} 
0

Поиск в списке разделителем каждый символ из строки ввода. Если найдено, распечатайте индекс. Вы также можете использовать Set для хранения разделителей

0

Ниже программа даст результат. это делается с помощью RegEx.

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class FindIndexUsingRegex { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    findMatches("aaa/bbb;ccc\\)",";|,|\\)|/"); 
} 

public static void findMatches(String source, String regex) { 
    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(source); 

    while (matcher.find()) { 
     System.out.print("First index: " + matcher.start()+"\n"); 
     System.out.print("Last index: " + matcher.end()+"\n"); 
     System.out.println("Delimiter: " + matcher.group()+"\n"); 
     break; 
    } 
} 

} 

Выход:

First index: 3 
Last index: 4 
Delimiter:/