我被困在我的项目中,我们必须在数字行刻度中显示一行字符串,以便稍后我们可以删除或添加字符串到该字符串。我不知道如何根据字符串的长度以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);
}
答案 0 :(得分:1)
我建议您实现方法printScale
或类似的方法,以String
或int
作为参数,并为您打印这两行。
你很难过,你已经可以删除这些字符,所以如果你的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)。在某些时候,你必须停下来,因为这些数字不适合这个空间。