Как извлечь все слова, начинающиеся с гласной буквы и длины, равной n (в JAVA)? - PullRequest
0 голосов
/ 02 апреля 2019

Как извлечь слова из предложения, в котором длина слова = 3 (или другое число, введенное пользователем), а также начать с гласного?

public class LAB1 {

  public static void main(String[] args) throws IOException

  { 
    BufferedReader br=new BufferedReader (new InputStreamReader(System.in));

        System.out.print("Introduceți textul: ");
        String s=br.readLine();

        s = s+" ";

        int l=s.length();
        int pos=0;

        char ch1, ch2;
        String w;

        for(int i=0; i<l; i++)
        {
            ch1 = s.charAt(i);
            if(ch1 == ' ')
            {
                w = s.substring(pos,i); // extracting words one by one
                ch2 = w.charAt(0);

                if(ch2=='A' || ch2=='E' || ch2=='I' || ch2=='O' || ch2=='U' ||
                ch2=='a' || ch2=='e' || ch2=='i' || ch2=='o' || ch2=='u')
                {
                    System.out.println(w);
                }
                pos = i+1;
            }
        }
    }
}

run: Представить текст: Sprin прекрасна для АнаАна СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 33 секунды)

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Взгляните на Regex (регулярные выражения).Они предназначены именно для такого рода проблем и могут использоваться в Java изначально.

Некоторое учебное пособие: https://www.vogella.com/tutorials/JavaRegularExpressions/article.html

Для тестирования вы regex, это удобный сайт https://regexr.com/

1 голос
/ 02 апреля 2019

Я согласен, что регулярные выражения могут помочь, поэтому можно сделать:

if (word.matches("(?i)^[aeiou].{2}")) { ... }

Если «2» настроено так, чтобы соответствовать желаемой длине - 1, а «aeiou» может быть расширено для поддержки дополнительных гласных.

Однако такой подход также довольно продвинут. Для более базового подхода я хотел бы разделить проблему на два разных метода и использовать switch, а не сложный оператор if с большим количеством предложений ||.

public static void main(String[] args)
{
    // you can gather these entries from a Scanner, or whatever
    final String inp = "Spring is Amazingly Beautiful for Ana";
    final int len = 3;


    String[] words = extractWords(inp);
    for (String word : words) {
        if (correctLength(word, len) && startsWithVowel(word)) {
            System.out.println(word);
        }
    }
}

public static String[] extractWords(final String sentence)
{
    return sentence.split("[\\s]+");
}

public static boolean correctLength(String word, int expLen)
{
    return word.length() == expLen;
}

public static boolean startsWithVowel(final String word)
{
    if (word == null || word.isBlank()) {
        return false;
    }

    boolean startsWith = false;



    // really need to develop a comprehensive approach to what is a vowel
    // could use regular expressions,
    //
    // return word.matches("(?i)^[aeiou].*$");
    //
    // but it is slightly easier if 
    // just use a known set since there are more than aeiou in the world
    // also, we will set to lower case, so can use smaller set
    switch (word.toLowerCase().charAt(0)) {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        startsWith = true;
        break;

    default:
        break;
    }

    return startsWith;
}

Этот подход разделяет вопросы длины слова и начала слова на отдельные методы (также поддерживает более простое тестирование) и использует .split() для получения слов.

...