Как я могу проверить содержит ли список строк(ArrayList ) какой то символ?
Задача такова что нужно проверить есть ли буква "P".ignoreCase в массиве
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class letterPletterN {
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 5; i++) {
list.add(reader.readLine());
}
fix(list);
}
public static String fix(ArrayList<String> list, String testStr) {
for (int j = 0; j < testStr.length(); j++) {
boolean found = false;
for (int i = 0; i < list.size() && !found; i++) {
found = list.get(i).indexOf(testStr.charAt(j)) >= 0;
}
}
return testStr;
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Если нужно проверить наличие некоторого одного символа в списке строк, следует создать метод, принимающий список строк и символ в качестве аргументов и возвращающий булево значение:
public static boolean listContainsChar(List<String> list, char c) {
c = Character.toLowerCase(c);
for (String str : list) {
for (int i = 0, n = str.length(); i < n; i++) {
char symbol = Character.toLowerCase(str.charAt(i));
if (c == symbol) {
return true;
}
}
}
return false;
}
С использованием Stream API код немного сократится:
public static boolean listContainsChar(List<String> list, char c) {
char lc = Character.toLowerCase(c);
return list.stream() // Stream<String> поток строк
.flatMapToInt(String::chars) // IntStream превратить в общий поток символов
.map(Character::toLowerCase) // IntStream поток строчных символов
.anyMatch(symb -> lc == symb); // любое совпадение
}