如何从右到左对角线打印字符串



我正在网上练习一些Java练习,遇到了一个可以这样打印字符串"DIAGONALLY"的练习:

D
  I
    A
      G 
        O
          N 
            A
              L
                L
                  Y

我做完了没有问题。然后我决定尝试像这样打印出来:

D
  I
    A
      G 
        O
          N 
        A
      L
    L
  Y

这是我到目前为止尝试过的:

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%sn", s, d.charAt(i));
            if (i < 6)
                s = s + " ";
            else
                s = s - " ";
        }
    }
}

现在显然"else s = s - ";"部分是错误的,但我现在只是把它放在那里,因为我不知道如何从字符串中减去一个空格。我将如何从右向左对角线打印 d 的子字符串?

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

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

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

使用 substring()

public String substring(int beginIndex)

返回一个新字符串,该字符串是此字符串的子字符串。子字符串以指定索引处的字符开头,并延伸到此字符串的末尾。

你的代码有一个错误,我应该少 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%sn", s, d.charAt(i));
            if (i < 5)
                s = s + " ";
            else
                s = s.substring(1);
        }
    }
}
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%sn", s, d.charAt(i));
            if (i < (d.length()+1)/2)
                s.append(" ");
            else
                s.setLength(s.length()-1);
        }
    }
}

StringBuilder就像一个可扩展的String。您可以根据需要随时添加.append()。您还可以设置其长度。所以为了做你的s = s - " ",我只是将其长度设置为比上次少一个。

我还将您的硬编码长度 6 更改为 d 字符串长度的一半(加上 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(" "));
        }

最新更新