2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
基于Nina Scholz 的想法:
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)) : "?";
}
輸出:
0123456789

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
嘗試將三行字符串解析為數(shù)字序列將很棘手,因?yàn)樵跀?shù)字之間沒(méi)有某種分隔符。
123456789012345678901234567890
..._.._....._.._.._.._.._.._..
.|._|._||_||_.|_...||_||_||.|.
.||_.._|..|._||_|..||_|._||_|.
123456789012345678901234567890
上面是您的原始示例,其中的空格被點(diǎn)替換以突出顯示它們。請(qǐng)注意,有些數(shù)字是 1 個(gè)字符寬 ('1'),有些是 2 個(gè)字符 ('3', '7'),其余的則是 3 個(gè)字符。
問(wèn)題: - '1's 總是只占兩列嗎?- '2' 和 '3' 之間以及 '6' 和 '7' 之間有一個(gè)空格,但其他數(shù)字之間沒(méi)有。在“1”之前還有一個(gè)前導(dǎo)空格。需要少于三列的字符是否會(huì)有前導(dǎo)空格的規(guī)則?- 還會(huì)有其他空間嗎?
我這樣做的方法是制作一個(gè)帶有三個(gè)字符串(三行)的對(duì)象。字符串必須等長(zhǎng)。然后,實(shí)現(xiàn)一個(gè) char-wise 解析器,將字符從三個(gè)字符串中平均提取出來(lái)。如果所有三個(gè)字符都是空格,請(qǐng)刪除它們。如果沒(méi)有,讀一欄,你有'1'嗎?如果沒(méi)有,請(qǐng)閱讀另一個(gè),你有“3”還是“7”?如果沒(méi)有,請(qǐng)閱讀第三篇,你有什么性格?
這有幫助嗎?
添加回答
舉報(bào)