javascriptjavaseven-segment-display

Converting seven segment to number


I want to convert seven segment numbers to normal string in java. For example, if input string like this

input

   _  _     _  _  _  _  _  _   
 | _| _||_||_ |_   ||_||_|| |
 ||_  _|  | _||_|  ||_| _||_|

output should be like

1234567890

I have found this JavaScript answer, and I'm trying to convert it to java.

for now I have:

private static void get7segment(String ascii) 
    {
        String[] splited="909561432".split("");
        HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
        map.put(0, 63);
        map.put(1, 6);
        map.put(2, 91);
        map.put(3, 79);
        map.put(4, 102);
        map.put(5, 109);
        map.put(6, 125);
        map.put(7, 7);
        map.put(8, 127);
        map.put(9, 111);            
    }

any help would be appricheate


Solution

  • Based on Nina Scholz's idea:

    public static void main(String[] args) {
    String example= " _     _  _     _  _  _  _  _ \n| |  | _| _||_||_ |_   ||_||_| \n|_|  ||_  _|  | _||_|  ||_| _|";
            System.out.println(get7segment(example));
    }
    
        private static String get7segment(String ascii) {
            String result = "";
    
            String[] lines = ascii.split("\n");
            String[] line1;
            String[] line2;
            String[] line3;
    
            for (int j = 0; j < lines.length - 2; j += 4) {
                line1 = lines[j].split("");
                line2 = lines[j + 1].split("");
                line3 = lines[j + 2].split("");
    
                String pow = "";
                int mod = 3;
    
                for (int i = 0; i < line1.length; i++) {
                    if (i % mod == 0) {
                        String strAs = digitToString(pow);
    
                        result += strAs;
                        pow = "";
                    }
    
                    if (line1[i].equals("_") && i % mod == 1)
                        pow += "0";
    
                    if (line2[i].equals("|") && i % mod == 0)// left
                        pow += "5";
                    if (line2[i].equals("|") && i % mod == 2)// right
                        pow += "1";
                    if (line2[i].equals("_") && i % mod == 1)// bottom
                        pow += "6";
    
                    if (line3[i].equals("|") && i % mod == 0)// left
                        pow += "4";
                    if (line3[i].equals("|") && i % mod == 2)// right
                        pow += "2";
                    if (line3[i].equals("_") && i % mod == 1)// bottom
                        pow += "3";
    
                    if (line1.length - 1 == i) {
                        String strAs = digitToString(pow);
                        result += strAs;
                        pow = "";
                    }
                }
    
    
                result += "\n";
            }
            return result;
        }
    
        /*
         * Converting single ascii digit to regular digit
         */
        private static String digitToString(String asciiDigit) {
            if (asciiDigit == null || asciiDigit.equals(""))
                return "";
            int pow = 0;
            for (int i = 0; i < asciiDigit.length(); i++)
                pow += Math.pow(2, Character.getNumericValue(asciiDigit.charAt(i)));
    
            HashMap<Integer, Integer> map = new HashMap<Integer, Integer>() {
                {
                    put(63, 0);
                    put(6, 1);
                    put(91, 2);
                    put(79, 3);
                    put(102, 4);
                    put(109, 5);
                    put(125, 6);
                    put(7, 7);
                    put(127, 8);
                    put(111, 9);
                }
            };
            return map.containsKey(pow) ? Integer.toString(map.get(pow)) : "?";
        }
    

    Output:

    0123456789