Как сделать чтобы функция работала без учета регистра
Задача:
Прочитать текст из файла и написать функцию, которая считает количество вхождений некоторой строки в этот текст без учета регистра символов. Сама функция должна работать без учета регистра.
Использовать цикл иindexOf, который принимает начальный индекс, с которого искать.
Просьба подсказать, как сделать функцию без учета регистра? Возможно, через регулярные выражения.
Код.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class OccurrencesCount {
public static void main(String[] args) throws FileNotFoundException {
String searchString = "word";
File file = new File("out.txt");
System.out.println("Количество вхождений подстроки " + searchString + " = " + getOccurrencesCount(searchString, file));
}
public static int getOccurrencesCount(String searchString, File file) throws FileNotFoundException {
try (Scanner scanner = new Scanner(file)) {
int occurrencesCount = 0;
while (scanner.hasNextLine()) {
String inputString = scanner.nextLine().toLowerCase();
int searchStringStartIndex = 0;
while (true) {
searchStringStartIndex = searchString.indexOf(inputString,searchStringStartIndex);
if (searchStringStartIndex < 0) {
break;
}
occurrencesCount++;
searchStringStartIndex += searchString.length();
}
}
return occurrencesCount;
}
}
}
Ответы (1 шт):
Вы и так практически написали функцию, которая работает без учёта регистра. Остаётся только, помимо регистра каждой строки файла, понижать и регистр искомой подстроки searchString, и тогда функция действительно будет регистронезависимой.
К примеру, чтобы не понижать регистр искомой подстроки каждый раз, это можно сделать вот так в самом начале работы функции:
searchString = searchString.toLowerCase();
С другой стороны, в коде есть другая проблема. Строка
searchStringStartIndex = searchString.indexOf(inputString,searchStringStartIndex);
некорректна. Она у вас ищет вхождение строки в подстроку, а не наоборот. Её надо применять к исходной строке, а в качестве параметра передавать подстроку, то есть:
searchStringStartIndex = inputString.indexOf(searchString, searchStringStartIndex);