Сравнение символа в двух строках - PullRequest
0 голосов
/ 25 октября 2018

Я хочу проверить, одинаковы ли символы в каждой строке, и могу ли я построить вторую строку, которая дается из символов из первой строки.Например, у меня есть Random String = "amksomsamk", и я должен сравнить его с другим "askommmaks".

Сначала я пишу метод, который проверяет длину

     public boolean areEquals(String s1, String s2){
        if (s1.toCharArray().length == s2.toCharArray().length){
            return true;
        }else
            return false;

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

PS.Для данного примера я хочу получить true в ответ, потому что символы в этой конкретной строке одинаковы.amksomsamk a: 2 m: 3 k: 2 s: 2 o: 1 askommks a: 2 m: 3 k: 2 s: 2 o: 1 Если я использую equals, он не будет работать

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Преобразовать каждое String в char[]

char[] str1 = s1.toCharArray();
char[] str2 = s2.toCharArray();

Сортировать каждое char[]

Arrays.sort(str1);
Arrays.sort(str2);

Проверьте, равны ли

return Arrays.equals(str1, str2);
0 голосов
/ 31 октября 2018

Использование рекурсии со строками StringBuilder дает краткое решение, хотя понять код нелегко:

public static void main(String[] args) {
    String s1 = "☆★?\u4e16\u754c\u4f60d?bbbZZ❸?";
    String s2 = "Zb☆b\u754cb★??\u4e16d❸\u4f60Z?";
    boolean matched = (s1.length() != s2.length()) ? false : compareStrings(new StringBuilder(s1), new StringBuilder(s2));
    System.out.println("Same chars for '" + s1 + "' and '" + s2 + "'? " + matched);
}

private static boolean compareStrings(StringBuilder sb1, StringBuilder sb2) {
    if (sb1.length() == 0) {
        return true;
    }
    int ind = sb2.indexOf((String) sb1.subSequence(0, 1));
    return ind == -1 ? false : compareStrings(sb1.deleteCharAt(0), sb2.deleteCharAt(ind));
}

Это вывод:

Те же символы для '☆★ ? 世界 你 d?bbbZZ❸? 'и' Zb ☆ b 界 b ★ ?? 世 d❸ 你 Z? '?правда

0 голосов
/ 25 октября 2018

Вы можете сравнить его, используя функцию ниже:

public boolean isEqual(String s1, String s2) {
    if (s1.length() != s2.length())
        return false;

    Map<Character, Integer> charsCountMap = getCharsByCount(s1);


    for (char c : s2.toCharArray()) {
        if (charsCountMap.get(c) == null)
            return false;

        charsCountMap.put(c, charsCountMap.get(c) - 1);
    }

    return charsCountMap.values().stream()
            .allMatch(count -> count == 0);
}

private Map<Character, Integer> getCharsByCount(String s) {
    Map<Character, Integer> charsCountMap = new HashMap<>(s.length());

    for (char c : s.toCharArray())
        charsCountMap.put(c, charsCountMap.getOrDefault(c, 0) + 1);

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