用户键入消息以及同一句子中的所需内容。
command > message A long message where there cant be more than 56 characters.
我想在" message"之后接受用户输入的任何内容。并用一个盒子包围它:
############################################################
# #
# A LONG MESSAGE WHERE THERE CANT BE MORE THAN 56 CHARACTE #
# #
############################################################
框架的宽度应为60个空格,并且在消息之前和之后至少应有一个空格。邮件的长度不能超过56个字符。
这是我尝试的但是我一直收到错误:StringIndexOutOfBoundsException ..
private void printBoxedMessage() {
String shorterString = nextObjective.substring(8).toUpperCase();
if (!(shorterString.equals(null))) {
for (int n = 0; n < 5; n++) {
if (n == 0 || n == 4) {
for (int m = 0; m < 60; m++) {
System.out.print("#");
}
} else if (n == 1 || n == 3) {
for (int y = 0; y < 60; y++) {
if (y == 0 || y == 59) {
System.out.print("#");
} else if (y > 0 && y < 60) {
System.out.print(" ");
}
}
} else if (n == 2) {
for (int i = 0; i < 60; i++) {
if (i == 0 || i == 59) {
System.out.print("#");
} else if (i == 1 || i == 58) {
System.out.print(" ");
} else if (i == 2) {
System.out.printf("%56s", shorterString.substring(0, 56));
}
}
}
}
}
}
答案 0 :(得分:1)
我要处理的方法是首先检查输入的字符串是否超过56个字符。如果您不希望它,请让用户重新输入。另外,如果您希望周围区域框架与输入的长度相匹配,那么只需创建一个for循环以匹配输入消息的长度。
public class PrintBoxedMethod {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Boolean lengthCheck = false;
System.out.println("Enter a message up to 56 characters");
String message = input.nextLine();
while(lengthCheck == false){
if(message.length()> 56){
System.out.println("Message is too long, Enter a message up to 56 characters");
message = input.nextLine();
} else lengthCheck = true;
}
for(int i = 0; i<message.length() + 4;i++){
System.out.print("#");
}
System.out.println();
System.out.print("# ");
System.out.print(message);
System.out.println(" #");
for(int i = 0; i<message.length() + 4;i++){
System.out.print("#");
}
}
}
答案 1 :(得分:0)
不要假设字符串长度。 (更正格式) 使用Math.min()为大小创建一个int,然后当你得到一个子字符串时,使用大小而不是56.例如,在你的第一行和最后一行,如果你有一个短于56的字符串(nextObjective)或者8?
int size = Math.min(incomingString.length,56);
...
System.out.printf("%56s", shorterString.substring(0, Math.min(size,56)));
答案 2 :(得分:0)
你的代码真的很难理解(至少对我而言)没有任何评论来解释。让我们尝试一种更直接的方法:
public static void boxMessage(String message) {
// first line
int length = message.length();
for (int i = 0 ; i < 60 ; i++) {
System.out.print("#");
}
// second line
System.out.print("\n#");
for (int i = 0 ; i < 58 ; i++) {
System.out.print(" ");
}
System.out.print("#\n");
// third line. Left spaces is the number of spaces on the left of the message.
System.out.print("# ");
int leftSpaces = (58 - message.length()) / 2;
for (int i = 0 ; i < leftSpaces ; i++) {
System.out.print(" ");
}
System.out.print(message);
for (int i = 0 ; i < 58 - leftSpaces - length ; i++) { // 58 - leftSpaces - length is number of spaces the right side should have.
System.out.print(" ");
}
System.out.print(" #\n");
// fourth line
System.out.print("#")
for (int i = 0 ; i < 58 ; i++) {
System.out.print(" ");
}
System.out.print("#\n");
// last line
for (int i = 0 ; i < 60 ; i++) {
System.out.print("#");
}
}
用法:
boxMessage("A LONG MESSAGE WHERE THERE CANT BE MORE THAN 56 CHARACTE");
打印:
############################################################
# #
# A LONG MESSAGE WHERE THERE CANT BE MORE THAN 56 CHARACTE #
# #
############################################################