将七段转换为数字

Converting seven segment to number

我想将七段 数字 转换为 java 中的普通字符串。例如,如果输入这样的字符串

输入

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

输出应该像

1234567890

我找到了 this JavaScript 答案,我正在尝试将其转换为 java。

现在我有:

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);            
    }

如有帮助将不胜感激

尝试将三行字符串解析为数字序列会很棘手w/o数字之间的某种分隔符。

123456789012345678901234567890
..._.._....._.._.._.._.._.._..
.|._|._||_||_.|_...||_||_||.|.
.||_.._|..|._||_|..||_|._||_|.
123456789012345678901234567890

以上是您的原始示例,其中 space 被点替换以突出显示它们。 请注意,有些数字是 1 个字符宽('1'),有些是两个字符('3','7'),其余是三个。

问题: - '1 总是只占用两列吗? - 在“2”和“3”之间以及“6”和“7”之间有一个 space,但在其他数字之间没有。在“1”之前还有一个前导 space。规则是要求少于三列的字符将具有前导 space 吗? - 还会有其他 space 吗?

我这样做的方法是制作一个包含三个字符串(三行)的对象。字符串的长度必须相等。然后,实现一个字符解析器,从三个字符串中平均提取字符。如果所有三个字符都是 space,则删除它们。如果没有,读一个专栏,你有'1'吗?如果没有,再读一遍,你有“3”还是“7”?如果没有,请看第三篇,你的性格是什么?

有帮助吗?

基于Nina Scholz's想法:

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