сравнивая со строковыми массивами, игнорируя заглавные буквы, используя HashSet? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь сравнить два массива и сохранить соответствующие слова в новый массив «output», используя HashSet. Это работает, но это чувствительно к регистру. Как я могу сделать то же самое с соответствующими словами, независимо от случая? Спасибо!

    final String[] tokens = text.split(" ");
    final String[] input = getResources().getStringArray(R.array.input);

    final HashSet<String> set = new HashSet<>(Arrays.asList(tokens));
    set.retainAll(Arrays.asList(input));
    String[] output = {};
    output = set.toArray(output);

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Чтобы найти пересечение между двумя списками, независимо от регистра, вам нужно создать наборы строчных (или прописных) версий строк, например:

String[] a1 = {"aBc", "deF", "Ghk"};
String[] a2 = {"Abc", "ghK", "lmN"};

Set<String> s1 = new HashSet<>();
for(String a : a1) s1.add(a.toLowerCase());

Set<String> s2 = new HashSet<>();
for(String a : a2) s2.add(a.toLowerCase());

s1.retainAll(s2);

System.out.println(s1);

Вывод:

[abc, ghk]

Однако, если вы хотите сообщить об исходных версиях соответствующих строк, вам необходимо сохранить соответствие между строчными и исходными версиями, как в:

String[] a1 = {"aBc", "deF", "Ghk"};
String[] a2 = {"Abc", "ghK", "lmN"};

Map<String, String> m1 = new HashMap<>();
for(String a : a1) m1.put(a.toLowerCase(), a);

Map<String, String> m2 = new HashMap<>();
for(String a : a2) m2.put(a.toLowerCase(), a);

m1.keySet().retainAll(m2.keySet());

System.out.println(m1.values());
for(String s : m1.keySet())
    System.out.println(m1.get(s) + " : " + m2.get(s));

Вывод:

[aBc, Ghk]
aBc : Abc
Ghk : ghK
0 голосов
/ 30 марта 2020

Как я могу сделать то же самое с соответствующими словами, независимо от регистра?

Это невозможно, если вы используете Set, поскольку Set отбрасывает дублирующиеся значения. Если регистр игнорируется, это означает, что две строки с одинаковыми символами, но в другом регистре должны считаться равными, а затем сохраняться в Set, но Set может содержать только одну из двух одинаковых строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...