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

时间:2014-12-04 01:42:38

标签: java

我正在网上练习一些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%s\n", s, d.charAt(i));
            if (i < 6)
                s = s + " ";
            else
                s = s - " ";
        }
    }
}

现在显然是&#34;否则s = s - &#34; &#34 ;;&#34;部分是错误的,但我现在就把它放在那里,因为我不知道如何从字符串中减去空格。我如何从右到左对角线打印从6开始的子串?

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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%s\n", s, d.charAt(i));
            if (i < (d.length()+1)/2)
                s.append(" ");
            else
                s.setLength(s.length()-1);
        }
    }
}

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

我还将你的硬编码长度6改为d字符串长度的一半(再加上一个让数学运算起来),这样它就可以用于任何字符串。

答案 2 :(得分:1)

使用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%s\n", s, d.charAt(i));
            if (i < 5)
                s = s + " ";
            else
                s = s.substring(1);
        }
    }
}

答案 3 :(得分:0)

当然,这不是新技术,而是不同。

  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(" "));

        }
相关问题