Один из простейших способов можно заменить пробела с \s*
в регулярных выражениях шаблона так будет выглядеть как "How\\s*are\\s*you"
так что это может соответствовать Howareyou
How areyou
Howare you
.
String pageText="Hello World, How areyou doing";
Pattern pattern = Pattern.compile("How are you".replaceAll("\\s+","\\\\s*"));
Matcher matcher = pattern.matcher(pageText);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println(count);
Edit:
Поскольку вы используете Pattern.quote
, чтобы избежать всех регулярных выражений специальные символы добавляющие \s*
внутри не имеет особого смысла, так как он также будет экранировать. Простое решение для этого будет цитировать только слова, так как только они могут иметь регулярное выражение метасимволы, которые требуют побега, поэтому мы lookinf для решения, которое будет строить нам что-то вроде
quote(word1)\s*quote(word2)\s*quote(word3)
кодекса, который может выглядеть следующим образом:
String pageText = "Hello World, How areyou doing";
String searchFor = "How are you";
String searchingRegex = Stream.of(searchFor.split("\\s+"))//stream of words
.map(word -> Pattern.quote(word))//quote each word
.collect(Collectors.joining("\\s*"));//join words with `\s*` delimiter
Pattern pattern = Pattern.compile(searchingRegex);
//...
Перед сопоставлением удалите все пробелы из объектов и строк поиска. Вы можете даже избежать регулярного выражения и использовать 'String # contains' – anubhava