Java 如何从右向左对角打印字符串?

Java 如何从右向左对角打印字符串?,java,Java,我在网上练习一些java练习,遇到了一个以“对角线”方式打印字符串的练习: 我没问题就完成了。然后我决定试着像这样打印出来: 以下是我迄今为止所尝试的: public class Examples { public static void main(String[] args) { String d = "DIAGONALLY"; String s = ""; for (int i = 0; i < d.length(); i++)

我在网上练习一些java练习,遇到了一个以“对角线”方式打印字符串的练习:

我没问题就完成了。然后我决定试着像这样打印出来:

以下是我迄今为止所尝试的:

public class Examples {
    public static void main(String[] args) {
        String d = "DIAGONALLY";
        String s = "";

        for (int i = 0; i < d.length(); i++) {
            System.out.printf("%s%s\n", s, d.charAt(i));
            if (i < 6)
                s = s + " ";
            else
                s = s - " ";
        }
    }
}
公共类示例{
公共静态void main(字符串[]args){
字符串d=“对角”;
字符串s=“”;
对于(int i=0;i

很明显,“else s=s-”;“部分是错误的,但我现在把它放在那里,因为我不知道如何从字符串中减去一个空格。如何打印d的子字符串,从右到左从6对角开始?

您不能从字符串中减去字符,但可以使用
substring()
方法提取字符串的一部分,该方法需要两个参数:要包含在“剪切”中的第一个字符的索引,以及要包含的最后一个字符后的第一个字符的索引

但是,在这种情况下,最好为每一行生成一个新的
字符串
新字符串('',x)
将为您提供一个由
x
空格组成的
字符串。(抱歉,语言混乱:该构造函数存在于C#中,但不存在于Java中。)

稍后(当您开始编写处理大量数据的较大程序时),请注意字符串串联(
+
)和
子字符串()
越慢,字符串越大。如果需要逐步操作大字符串,则应使用
StringBuffer
StringBuilder

公共类示例{
public class Examples {
    public static void main(String[] args) {
        String d = "DIAGONALLY";
        StringBuilder s = new StringBuilder("");

        for (int i = 0; i < d.length(); i++) {
            System.out.printf("%s%s\n", s, d.charAt(i));
            if (i < (d.length()+1)/2)
                s.append(" ");
            else
                s.setLength(s.length()-1);
        }
    }
}
公共静态void main(字符串[]args){ 字符串d=“对角”; StringBuilder s=新的StringBuilder(“”); 对于(int i=0;i
StringBuilder
就像一个可扩展的
String
。您可以随时使用
.append()
添加到它。您还可以设置其长度。因此,要执行
s=s-“”
,我只需将其长度设置为比上次少一个

我还将您的硬编码长度6更改为d字符串长度的一半(加上1以使数学运算正常),因此它可以用于任何字符串。

使用子字符串()

返回作为此字符串的子字符串的新字符串。子字符串以指定索引处的字符开头,并延伸到此字符串的结尾

您的代码有一个错误,我应该小于5

public class Examples  {
    public static void main(String[] args) {
        String d = "DIAGONALLY";
        String s = "";

        for (int i = 0; i < d.length(); i++) {
            System.out.printf("%s%s\n", s, d.charAt(i));
            if (i < 5)
                s = s + " ";
            else
                s = s.substring(1);
        }
    }
}
公共类示例{
公共静态void main(字符串[]args){
字符串d=“对角”;
字符串s=“”;
对于(int i=0;i
当然,这不是新技术,而是不同的

  String d = "DIAGONALLY";
        String s = "";

        for (int i = 0; i < d.length(); i++) {
           //System.out.printf("%s%s", s, d.charAt(i));
            System.out.println(s+d.charAt(i));
            if (i <6)
                s = s + " ";
            else
                s = s.substring(0,s.lastIndexOf(" "));

        }
String d=“对角”;
字符串s=“”;
对于(int i=0;ipublic String substring(int beginIndex)
public class Examples  {
    public static void main(String[] args) {
        String d = "DIAGONALLY";
        String s = "";

        for (int i = 0; i < d.length(); i++) {
            System.out.printf("%s%s\n", s, d.charAt(i));
            if (i < 5)
                s = s + " ";
            else
                s = s.substring(1);
        }
    }
}
  String d = "DIAGONALLY";
        String s = "";

        for (int i = 0; i < d.length(); i++) {
           //System.out.printf("%s%s", s, d.charAt(i));
            System.out.println(s+d.charAt(i));
            if (i <6)
                s = s + " ";
            else
                s = s.substring(0,s.lastIndexOf(" "));

        }