【问题标题】:compare arrays with repetitive elements and add the elements not present to the respective arrays including the repetitive elements将数组与重复元素进行比较,并将不存在的元素添加到包括重复元素在内的各个数组中
【发布时间】:2017-11-13 16:44:02
【问题描述】:

我正在开发一个程序,我们比较两个字符串并将一个字符串中不存在的字符添加到另一个字符串中,反之亦然。 例如:字符串 1- aabccd 字符串 2-acccdd 输出应该是 - 要添加到字符串 1 的字符 - cd 要添加到字符串 2-ab 的字符 当字符不重复时,我能够实现它, 例如:字符串 1- 芒果 弦2-盎格鲁 输出是 - 要添加到字符串 1 的字符 - l 要添加到字符串 2- m 的字符 但在字符重复时无法获取。

这是我写的代码-

import java.util.Scanner;

public class Test {

public static void main(String[] args) {
Scanner user_input = new Scanner(System.in);

        String S1, S2;

        System.out.println("Enter String 1: ");
        S1 = user_input.next();

        System.out.println("Enter String 2: ");
        S2 = user_input.next();

        user_input.close();

        char[] S1Array = S1.toLowerCase().toCharArray();
        char[] S2Array = S2.toLowerCase().toCharArray();
        charAddition(S1Array, S2Array);
        charAdditionReverse(S2Array,S1Array);
}
private static void charAddition(char[] n, char[] S1Array) {
for (char n1 : n) {
            if (!isPresent(n1, S1Array)) {
                System.out.println("character to be added to S2Array
is: " + n1);
            }
        }
}
private static void charAdditionReverse(char[] n, char[] S1Array) {
for (char n1 : n) {
            if (!isPresent(n1, S1Array)) {
                System.out.println("character to be added to S1Array
is: " + n1);


            }
        }
}


    private static boolean isPresent(char n, char[] S1Array) {
        for (char i : S1Array) {
            if (n == i) {
                return true;
            }
        }
        return false;
    }
}

【问题讨论】:

    标签: java arrays string


    【解决方案1】:

    这是您的解决方案:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Scanner;
    
    public class Test {
    
        public static void main(String[] args) {
            Scanner user_input = new Scanner(System.in);
    
            String S1, S2;
    
            System.out.println("Enter String 1: ");
            S1 = user_input.next();
    
            System.out.println("Enter String 2: ");
            S2 = user_input.next();
    
            user_input.close();
    
            char[] S1Array = S1.toLowerCase().toCharArray();
            char[] S2Array = S2.toLowerCase().toCharArray();
            charAddition(S1Array, S2Array,false);
            charAddition(S2Array,S1Array,true);
        }
        private static void charAddition(char[] n, char[] S1Array,boolean isreverse) 
        {
    
            List<char[]> asList = Arrays.asList(S1Array); // because this DOES compile.
    
            List<Character> wordlist = new ArrayList<Character>();
            for (char c : S1Array) {
                wordlist.add(c);
            }
    
            for (char n1 : n) 
            {
                if (!isPresent(n1, wordlist)) 
                {
                    if(!isreverse)
                    {
                        System.out.println("character to be added to S2Arrayis: " + n1);
    
                    }else
                    {
                        System.out.println("character to be added to S1Arrayis: " + n1);
                    }
                }
            }
        }
    
    
        private static boolean isPresent(char n, List<Character> S1Array) 
        {
            boolean flag ;
            for (Iterator<Character> it = S1Array.iterator(); it.hasNext();) 
            {
                char i = it.next();
                if (n == i) 
                {
                    it.remove();
                    return true;
                }
            }
            return false;
        }
    }
    

    要解决上述问题,您必须检查特定字符重复的次数。这就是为什么我从将 ArrayList 传递给函数的数组创建了新的数组列表,并删除了已经匹配的元素。我已将 2 个函数变为 1 个函数,因为我觉得这是编写代码的更好方法。

    【讨论】:

    • 它非常适合您的“aabccd”和“acccdd”示例:)
    • 请使用正确的格式:1) 使用正确的缩进; 2) 遵循 Java 命名约定 - 变量名应以小写开头且不包含下划线。
    • 请稍等,我会做的。对不起,我的错误
    • 我不能更改他已经使用的变量名称,否则他会感到困惑你知道.. 虽然我检查了我为答案创建的所有变量的名称:)
    • 欢迎.. :) ... 如果您认为是,请选择作为答案 :)
    【解决方案2】:

    完全不同的方法:

    void disjoint(String s1, String s2) {
        // Convert two strings to character lists
        List<Character> chars1 = s1.chars()
            .mapToObj(t -> (char) t)
            .collect(Collectors.toList());
        List<Character> chars2 = s2.chars()
            .mapToObj(t -> (char) t)
            .collect(Collectors.toList());
    
        // Make a list of elements we are going to remove from chars1
        List<Character> removedElements = new ArrayList<>();
        chars1.forEach(t -> {
            // Try to remove the current character from chars2, and if it has
            // successfully been removed, add it to our removedElements list
            if (chars2.remove(t)) {
                removedElements.add(t);
            }
        });
        // At last remove each removed element from chars2 also from chars1
        removedElements.forEach(chars1::remove);
    
        System.out.println(chars1);
        System.out.println(chars2);
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多