根据给定的字符串显示一个数字行

时间:2017-02-14 22:55:23

标签: java

我被困在我的项目中,我们必须在数字行刻度中显示一行字符串,以便稍后我们可以删除或添加字符串到该字符串。我不知道如何根据字符串的长度以5s打印出刻度。

例如:

0    5   10   15   20 
|----+----|----+----|-
This is the first line

然后,用户将从位置和位置选择要从字符串中删除的字符。它将显示用户从字符串中选择的位置并删除。

例如:

from position: 12
to position: 18

0    5   10   15   20 
|----+----|----+----|-
This is the first line
            ^^^^^^^ --> // this will be deleted
y/n: y
 0    5   10   15
|----+----|----+
This is the ine

我能够删除字符,但我不知道如何根据字符串显示数字行。到目前为止,这是我的代码:

 public void showNumberLine(String line) 
    {
        int lineCount = line.length(); // getting the length of the string being passed in
        String numberLine = "";

        for(int i = 0; i <= lineCount; i++) // 
        {

                numberLine = "" + i;
                System.out.println("|----+----|----+----|-");

        }
    }

public void deleteSubString()
    {
        Scanner keyboard = new Scanner(System.in);
        showNumberLine(textOfLine); // this will print out then number line and the line

        System.out.print("from position: ");
        int fromIndex = keyboard.nextInt();
        System.out.print("to position: ");
        int toIndex = keyboard.nextInt();

        if(fromIndex < 0 || fromIndex > numOfChar || toIndex < 0 || toIndex > numOfChar)
        {
            System.out.println("Cannot delete at the given index: Index Out of Bounds");
        }

        /*
         * Create a new number line where it shows what is going to be deleted
         */
        String newLineOfString = textOfLine.substring(fromIndex, toIndex);
        textOfLine = textOfLine.replace(newLineOfString, "");
        System.out.println(newLineOfString);

    }

2 个答案:

答案 0 :(得分:1)

我建议您实现方法printScale或类似的方法,以Stringint作为参数,并为您打印这两行。

你很难过,你已经可以删除这些字符,所以如果你的String值为"This is the ine",你可以调用这样的方法:

printScale(myNewString.length());

这种方法可能看起来像这样(不完美但有效):

public void printLine(int amountOfCharacters) {
    StringBuilder lineNumber = new StringBuilder();
    StringBuilder lineScaleSymbols = new StringBuilder();
    for (int i = 0; i < amountOfCharacters; i++) {
        if (i % 10 == 0) {
            if (i < 10) {
                lineNumber.append(i);
            } else {
                lineNumber.insert(i -1, i);
            }
            lineScaleSymbols.append('|');
        } else if (i % 5 == 0) {
            if (i < 10) {
                lineNumber.append(i);
            } else {
                lineNumber.insert(i -1, i);
            }
            lineScaleSymbols.append('+');
        } else {
            lineNumber.append(' ');
            lineScaleSymbols.append('-');
        }
    }

    System.out.println(lineNumber.toString());
    System.out.println(lineScaleSymbols.toString());
}

希望这有帮助。

答案 1 :(得分:1)

您使用showNumberLine方法走在正确的轨道上。

让我们准确概述您需要做的事情:

  • 确定字符串的长度
  • 生成与字符串长度相同的数字行
    • 0结尾的每个字符都将是特殊字符|
    • 5结尾的每个字符都将是特殊字符+
    • 其他每个角色都是-

你可以像这样制作你的循环,使用模数运算符来确定要写的字符:

for(int i = 0; i < line.length(); i++) {
    if(i % 10 == 0) {
        // the number is divisible by 10 (ends in zero)
        System.out.print("|");
    } else if(i % 5 == 0 && i % 10 != 0) {
        // the number is divisible by 5 and not divisible by 10 (ends in 5)
        System.out.print("+");
    } else {
        System.out.print("-");
    }
    System.out.println();
}

输出:

|----+----|----+----|----+----|----+----|---
The quick brown fox jumped over the lazy dog

您需要更多代码来写出数字行上方的数字(0,5,10,15),我会留给您。这将是类似的逻辑,但有一些微妙的问题要考虑,因为数字的长度是1个字符,然后是2个字符,然后是3个字符,因为它们增加(0,5,10,15,... 100,105)。在某些时候,你必须停下来,因为这些数字不适合这个空间。