Метод .contains работает не так как надо
У меня есть задание: Считать две строки из файла. Построить новую строку, состоящую из символов, которые входят как в одну, так и в другую строку. И есть код:`
public static void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(System.in);
String a = "C:\\qq.txt";
try (BufferedReader r = new BufferedReader(new FileReader(a));
BufferedWriter out = new BufferedWriter(new FileWriter(new File(a), true))) {
String result = "";
String line;
while ((line = r.readLine()) != null) {
for (String letter : line.split("")) {
if (!result.contains(letter) /*&& Character.isAlphabetic(letter.charAt(0))*/) {
result += letter;
}
}
}
out.newLine();
out.write(result);
} catch (IOException ioe) {
System.out.println("Error" + ioe);
}
}
Метод .containsn работает, но не правильно - не со всеми строками. Примеры строк и вывода находятся во вложениях. Что я делаю не так?
Ответы (1 шт):
Автор решения: Alex Rudenko
→ Ссылка
Очевидно, надо сперва прочитать обе строки, а не обрабатывать каждую по отдельности.
Также для определения того, содержится ли символ в строке, не обязательно разбивать строку на подстроки длиной 1 символ и использовать String::contains, для проверки наличия символов лучше использовать String::indexOf:
public static String commonResult(String s1, String s2) {
StringBuilder sb = new StringBuilder();
for (char c : s1.toCharArray()) {
if (s2.indexOf(c) != -1) {
sb.append(c);
}
}
return sb.toString();
}
Тест - буквы k, d отфильтрованы
System.out.println(commonResult("kemper", "demper"));
// -> emper

