Stack Overflow на русском Asked by CilitBang on December 26, 2021
Самостоятельно учу Java, решаю задачи.
Условие:
Ищем нужные строки
Считать с консоли имя файла.
Вывести в консоль все строки из файла, которые содержат всего 2 слова из списка words.
Закрыть потоки.
Пример:
words содержит слова А, Б, В
Строки:
В Б А Д //3 слова из words, не подходит
А Б А Д //3 слова из words, не подходит
Д А Д //1 слово из words, не подходит
Д А Б Д //2 слова – подходит, выводим
Д А А Д //2 слова – подходит, выводим
Знаю, что можно просто через сплит сделать массив, потом сравнивать его элементы с каждым элементом списка. Но хочется решить при помощи регулярных выражений. Изначально, задумка была считать строку, убрать из нее все знаки пунктуации(pP), а потом при помощи Pattern и Matcher найти нужное и инкрементировать счетчик. Но, чую, что напортачил при создании паттерна.
public class Solution {
public static List<String> words = new ArrayList<String>();
static {
words.add("файл");
words.add("вид");
words.add("В");
}
public static void main(String[] args) {
Solution s = new Solution();
try(BufferedReader reader = new BufferedReader(new FileReader(s.fileNameReader()))){
int count = 0;
while (reader.ready()){
String str = reader.readLine();
str = str.replaceAll("\pP", "");
Pattern pattern = Pattern.compile("(\bфайл\b|\bвид\b|\bв\b)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()){
count++;
}
if (count == 2){
System.out.println(str);
count = 0;
}
}
}
catch (IOException e){
e.printStackTrace();
}
}
String fileNameReader() {
String name = "";
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
name = reader.readLine();
}
catch (IOException e){
e.printStackTrace();
}
return name;
}
}
Вот так вот:
^[^АБВ]*[АБВ][^АБВ]*[АБВ][^АБВ]*$
В Б А Д
А Б А Д
Д А Д
Д А Б Д
Д А А Д
А икщьекищ342пи24т 245т4 щ42т ьщ24ть 4т6 Б В
А икщьекищ342пи24т 245т4 щ42т ьщ24ть 4т6 Б киштищштецшщтищшцтиц
Находит 4, 5 и последнюю строки.
Answered by dIm0n on December 26, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP