Сканирование файла и сопоставление строк Java (в поисках лучшего способа)

1

Я создаю простую java-программу, которая сканирует файл и ищет определенные строки, я работаю в некоторой степени, но я уверен, что есть гораздо более эффективный и лучший способ сделать это, я использую метод IF содержит метод для сравнения для многих разных строк, но я чувствую, что это плохой способ практиковать и задавался вопросом, может ли кто-нибудь дать мне представление о том, что еще я мог бы попробовать?

    while (sc.hasNextLine()) {

          readLine = new Scanner(sc.nextLine());
          x = readLine.nextLine();
          numberOfLines++;  


            if (x.contains("a")) {
                numberOfConsonants++;
            }
            if (x.contains("A")) {
                numberOfConsonants++;
            }
            if (x.contains("e")) {
                numberOfConsonants++;
            }
            if (x.contains("E")) {
                numberOfConsonants++;
            }
            if (x.contains("i")) {
                numberOfConsonants++;
            }
            if (x.contains("I")) {
                numberOfConsonants++;
            }
            if (x.contains("o")) {
                numberOfConsonants++;
            }
            if (x.contains("O")) {
                numberOfConsonants++;
            }
            if (x.contains("u")) {
                numberOfConsonants++;
            }
            if (x.contains("U")) {
                numberOfConsonants++;
            }
}
Теги:
if-statement
java.util.scanner

2 ответа

0
Лучший ответ

Вы можете попробовать что-то вроде этого:

Set<String> consonants = new HashSet<>();
consonants.add("a");
consonants.add("e");
consonants.add("i");
consonants.add("o");
consonants.add("u");

while (sc.hasNextLine()) {

          readLine = new Scanner(sc.nextLine());
          x = readLine.nextLine();
          numberOfLines++;  

          if(consonants.contains(x.toLowerCase())) { 
              consonants++;
          }
}

Это позволит вам разместить буквы и сопоставить их на более позднем этапе. Наборы должны предоставить вам довольно быстрый способ проверить, существует ли элемент или нет.

В качестве побочной заметки вы соответствуете гласным, а не согласным (что может создать путаницу в вашем коде).

  • 0
    да спасибо я ищу оба я только что перепутал имена переменных спасибо за ваше предложение
1

Вы можете узнать о регулярных выражениях (например, в учебных пособиях оракула: https://docs.oracle.com/javase/tutorial/essential/regex/)

Регулярные выражения позволяют вам "сопоставлять" шаблоны со строками. И вы можете указать шаблон, который соответствует всем гласным "в одной съемке"; тем самым сворачивая ваш каскад операторов if в один.

(и я думаю, вы имеете в виду гласные, а не согласные?)

  • 0
    да, извините, я ищу как согласные, так и гласные, я просто перепутал имена переменных хаха спасибо за ваше предложение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню