2014-12-04 26 views
2

我在线练习一些Java练习和跨越一个将打印字符串“对角”这样走过来:如何从右到左对角地打印字符串?

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 - " "; 
     } 
    } 
} 

现在很明显的“其他S =秒 - “”;“部分是错误的,但我现在只是把它放在那里,因为我不知道如何从字符串中减去空白空间。我如何打印d的子串,从右到左,从6开始?

+0

Java字符串类有一个“substring”方法... – 2014-12-04 01:48:29

回答

1

使用字符串()

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); 
     } 
    } 
} 
+0

啊!天才。 – Jerry 2014-12-04 02:04:05

2

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

然而,在这种情况下,你可能会更好生成每行一个新的 Stringnew String(' ', x)会给你一个 String是由 x空间。 (对不起,语言混乱:该构造存在于C#,而不是在Java中)。

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

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 - " ",我只是把它的长度设置为比上次少了一次。

我也改变了你的硬编码长度为6的d字符串的长度的一半(加上一个得到数学的工作),以便它将适用于任何字符串。

0

Ofcourse它不是新的,但techinique不同。

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

     } 
相关问题