[英]How would I modify my code to search a multidimensional array diagonally from left to right and right to left?
[英]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()
方法提取字符串的一部分,该方法具有两个参数:要包括在“剪切”中的第一个字符的索引,以及要包括的最后一个字符之后的第一个字符。
但是,在这种情况下,最好为每行生成一个新的
(抱歉,语言混乱:该构造函数存在于C#中,但在Java中不存在。) String
:
new String(' ', x)
将为您提供一个包含
x
空格的
String
。
对于以后(当您开始编写处理更大数据量的更大程序时),请注意,字符串越大,字符串连接( +
)和substring()
越慢。 如果需要逐步处理大字符串,则应使用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);
}
}
}
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.