Сравнивая значение символа с символьным массивом в Java? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть массив символов. Я ищу образец согласного, а затем гласного, а затем согласного для нескольких слов пользовательского ввода в моем коде, хотя у меня есть только одно в этом примере. Есть ли способ увидеть, соответствует ли символ в строке любому символу в массиве. Есть ли лучший способ взглянуть на проблему? Я знаю, что мог бы перечислить все возможности в операторе if, но я ищу более быстрый метод.


    char[] carray= new char[] {'t','z','r','v'};
     char[] varray= new char[] {'t','z','r','v'};
 String stringy = "rival"; 
`for( int n=0;n<= stringy.length-2;n++){
if(stringy.charAt(n)== "any character in carray" && stringy.charAt(n+1)=="any character in varray" && stringy.charAt(n+2)=="any char in carray" ) {
//code
}
}

1 Ответ

1 голос
/ 07 октября 2019

Поскольку вы «ищете более быстрый метод» для «поиска паттерна согласного, а затем гласного, а затем согласного», забудьте массивы и используйте регулярное выражение:

if (stringy.matches(".*(?i)[^aeiou][aeiou][^aeiou].*")) {
    // string contains pattern of consonant then vowel then consonant
}

Механизмы регулярного выражения довольно быстрые, потому чтоони реализованы путем создания конечного автомата для шаблона. Нет более быстрого способа достижения того, чего вы хотите.

Написание кода также быстрее, потому что кода для написания намного меньше.


Если у вас есть коллекцияпользовательские строки ввода, чтобы найти все, что соответствует вашему целевому шаблону:

List<String> userInputStrings;

List<String> matchingStrings = userInputStrings.stream()
    .filter(str -> str.matches(".*(?i)[^aeiou][aeiou][^aeiou].*"))
    .collect(Collectors.toList());
...