繁体   English   中英

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

[英]How do I print a String diagonally from right to left?

我正在网上练习一些Java练习,并遇到了这样的练习,它会以这种方式打印字符串“ DIAGONALLY”:

 D I A GO NA L L Y 

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

 D I A GO NA 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 - " ";
        }
    }
}

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

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

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

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

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 - " " ,我只是将其长度设置为比上次短一。

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

当然,它不是新技术,而是不同的。

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

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM