将字符序列转换为其他字符序列

时间:2018-04-07 20:46:27

标签: java

你有一个代表数字波“L”(低)和“H”(高)的字符串。系统会要求它显示使用From<&T>表示的波形 如下例所示:如果它具有字符串Cow,则其数字波形为:

您可以看到以下内容:

{ _ , |}

每个“H”或“L”代表“_”或“ - ”和“|”当它改为另一个字母时

2 个答案:

答案 0 :(得分:0)

这是一个基本的解决方案:

String wave = "HHHHLLLLHHHHHLLHHLLHH";
wave = wave.replaceAll("(H)(L)|(L)(H)", "$1|$2");//-------------(1)

String low = "";
for (char c : wave.toCharArray()) {
    if (c == 'H') {//-------------------------------------------(2)
        System.out.print("_ ");
        low += "  ";
    } else {
        System.out.print("  ");
        low += c;
    }
}
System.out.println();//----------------------------------------(3)
for (char c : low.toCharArray()) {
    switch (c) {//---------------------------------------------(4)
        case 'L':
            System.out.print("_");
            break;
        case '|':
            System.out.print("|");
            break;
        default:
            System.out.print(" ");
            break;
    }
}

这个想法是:

  1. 在每个|LH之间设置一个HLL|HH|L
  2. 循环遍历字符数组,如果它等于H print _并将低位变量放到空格中,则打印空格并将字符添加到低位
  3. 断行以打印低波
  4. 如果字符为L打印_,则|打印条形图,否则打印空格

答案 1 :(得分:0)

在一行中:

void printWave(String highLows) {
    String wave = highLows
        .replace("HL", "H|L")
        .replace("LH", "L|H")
        .replace('L', '_')
        .replace('H', '-');                                        // -|_
    System.out.println(wave);
}

分两行:

void printWave(String highLows) {
    String wave = highLows
        .replace("HL", "H|L")
        .replace("LH", "L|H")
        .replace('L', '_')
        .replace('H', '-');                                        // -|_
    String line1 = wave.replaceAll("[^-]", " ").replace('-', '_'); // _
    String line2 = wave.replace('-', ' ');                         //  |_
    System.out.printf("%s%n%s%n", line1, line2);
}

使用─ ━ ┌ ┐ ┘ └进行图形处理:

void printWave(String highLows) {
    final String HOR_H_OR_L = "\u2501"; // ━
    final String HOR_GAP = "\u2501";    // ─
    final String H_TO_L1 = "\u2510";    // ┐
    final String H_TO_L2 = "\u2514";    // └
    final String L_TO_H1 = "\u250C";    // ┌
    final String L_TO_H2 = "\u2518";    // ┘

    StringBuilder line1 = new StringBuilder(); 
    StringBuilder line2 = new StringBuilder();
    char[] chars = highLows.toCharArray();
    for (int i = 0; i < chars.length(); ++i) {
        char ch = chars[i];
        if (ch == 'H') {
            line1.append(HOR_H_OR_L);
            line2.append(' ');
        } else {
            line1.append(' ');
            line2.append(HOR_H_OR_L);
        }
        if (i == chars.length - 1 || ch == chars[i + 1]) {
            if (ch == 'H') {
                line1.append(HOR_GAP);
                line2.append(' ');
            } else {
                line1.append(' ');
                line2.append(HOR_GAP);
            }
        } else {
            if (ch == 'H') {
                line1.append(H_TO_L1);
                line2.append(H_TO_L2);
            } else {
                line1.append(L_TO_H1);
                line2.append(L_TO_H2);
            }
        }
    }
    System.out.printf("%s%n%s%n", line1, line2);
}