java中如何在一行中的特定位置插入字符?

vbkedwbf  于 2023-03-11  发布在  Java
关注(0)|答案(4)|浏览(209)

我环顾四周,没有发现任何我真正理解或可以做的事情,我希望有一个简单的解决方案。我必须在这个程序的每一行后面的第20个字符槽中添加一个*
这是我的代码:

package StarBorder;

import java.util.Scanner;

public class NewTry {

    public static void main(String[] args) {
        System.out.println("Please input a word: ");
        Scanner stringScanner = new Scanner(System.in);
        String input = stringScanner.nextLine();
        int numberOfCharacters = 20;
        System.out.println("**********************");
        for (int i = 0; i < input.length(); i += numberOfCharacters) {
            String part = input.substring(i, Math.min(input.length(), i + numberOfCharacters));
            System.out.println("*" + part + "*");
        }
        System.out.println("**********************");
    }
}

这是它打印出来的内容:

**********************
*Hello I am doing som*
*e code, hello ther p*
*eople on stack overf*
*low* // I need this to be over where the other *'s are.
**********************

我需要一个满是星星的正方形。谢谢你的回答。
我也希望它不是在第二十个字符处截断,而是在第二十个字符之前的空格处截断。不过,这是次要问题。

ht4b089n

ht4b089n1#

你在问题中写道:
我也希望它不是在第二十个字符处切断,而是在那之前的空格处切断。
考虑以下代码。它使用printf方法(java.io.PrintStream类)将输出的每一行打印为20个字符的字符串,并带有一个前导星号和一个尾随星号(*)。格式字符串为:

*%-20s*%n

这意味着,如果字符串长度小于20个字符,则左对齐并使用尾随空格填充,并且后面有一个换行符。
我建议您使用调试器运行它,因为我相信这将帮助您理解它是如何工作的。

import java.util.Scanner;

public class NewTry {

    public static void main(String[] args) {
        System.out.println("Please input a word: ");
        Scanner stringScanner = new Scanner(System.in);
        String input = stringScanner.nextLine();
        input = input.trim();
        int numberOfCharacters = 20;
        String format = "*%-" + numberOfCharacters + "s*%n";
        System.out.println("**********************");
        int total = input.length();
        int start = 0;
        String hyphen;
        String substr;
        while (start + numberOfCharacters < total) {
            if (input.charAt(start) == ' ') {
                start++;
            }
            hyphen = "";
            int index = start + numberOfCharacters;
            if (index < total) {
                while (index > start  &&  input.charAt(index) != ' ') {
                    index--;
                }
                if (index == start) {
                    index = start + numberOfCharacters - 1;
                    hyphen = "-";
                }
            }
            substr = input.substring(start, index);
            if (substr.charAt(0) == ' ') {
                substr = substr.substring(1);
                index++;
                start++;
                int temp = start + numberOfCharacters;
                if (temp < total) {
                    if (input.charAt(temp) == ' ') {
                        index = temp;
                        substr = input.substring(start, index);
                    }
                }
            }
            System.out.printf(format, substr + hyphen);
            start = index;
        }
        if (start < total) {
            substr = input.substring(start);
            if (substr.charAt(0) == ' ') {
                substr = substr.substring(1);
            }
            System.out.printf(format, substr);
        }
        System.out.println("**********************");
        stringScanner.close();
    }
}

上述代码假设用户输入的字符串符合以下条件:

  • 字符串不包含标点符号,例如逗号、hyphens等。
  • 字符串中的单词仅由单个空格分隔,即没有TAB字符或多个连续空格。

注意,上面的代码也可以处理长度超过20个字符的单词,方法是取19个字符并添加一个连字符。
以下是我的测试运行:
一个二个二个一个一个三个一个一个一个四个一个一个一个一个五个一个一个一个一个一个六个一个一个一个一个七个一个

f4t66c6m

f4t66c6m2#

System.out.printf("*%-20s*%n", part);

这将打印part,左对齐(-),paddel到20. %n作为换行符。

t5zmwmid

t5zmwmid3#

一个简单的方法是打印一串空格来填充空白(填充字符串)。例如,对于input中的最后一行,您可以

System.out.print("*" + part);
    for(int i=0; i < numberOfCharacters - 2 - part.length(); i++){
        System.out.print(" ");
    }
    System.out.println("*");

这段代码所做的只是找出该部分的长度与理想子字符串的长度之间的差异,然后打印出相应数量的空格。

bxpogfeg

bxpogfeg4#

public static void main(String[] args) {

        System.out.println("Please input a word: ");
        Scanner stringScanner = new Scanner(System.in);
        String input = stringScanner.nextLine();
        int numberOfCharacters = 20;
        System.out.println("**********************");
        for (int i = 0; i < input.length(); i += numberOfCharacters) {
            String part = input.substring(i, Math.min(input.length(), i + numberOfCharacters));
            System.out.print("*" + part);
            // Quoting the comment area answer, there should not be a minus 2 here
            for (int j = 0; j < numberOfCharacters - part.length(); j++) {
                System.out.print(" ");
            }
            System.out.println("*");
        }
        System.out.println("**********************");
    }

相关问题