张继的枫桥夜泊
str="月落乌啼霜满天,江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。"以竖排的形式画出来,写了两个方法,觉得太烂太没效率,望指正改进,有精简的好方法望提出。
1,str.toCharArray()字符数组s2[],创建二维数组s1[4][8],把s2[]的字符放到对应的s2中,创建一个StringBuffer sb,把s2中的诗以“月江姑夜落枫苏半乌渔....”形式append(),再把sb.toString()成字符串s3,再把s3.subString(..,..)了,打印
月江姑夜
落枫苏半
乌渔城钟
啼火外声
霜对寒到
满愁山客
天眠寺船
,。,。
// char s1[][] = new char[4][8];
// char s2[] = str.toCharArray();
// int k = 0;
// System.out.println(s1.length);
// for (int i = 0; i < s1.length; i++)
// for (int j = 0; j < s1[i].length; j++) {
// s1[i][j] = s2[k];
// k++;
// }
// StringBuffer sb = new StringBuffer();
// int p=0;
// for (int i = 0; i < s1[0].length; i++)
// {
// for(int j=0;j<s1.length;j++)
// sb.append(s1[j][i]);
// }
// System.out.println(sb);
// String s3=sb.toString();
// String s4[]=new String[8];
// for(int i=0;i<s4.length;i++)
// {
// s4[i]=s3.substring(p,p+4);
// if(p<s3.length())
// p+=4;
// System.out.println(s4[i]);
// }
2,str.toCharArray()字符数组a[],创建一个StringBuffer sb把a[] append()进去,再把sb.toString()成字符串s1,再把s1.subString(..,..)了放到一个数组里s[]  char[] a = str.toCharArray();
 System.out.println(a.length);
 StringBuffer sb = new StringBuffer();
 for (int j = 0; j < 8; j++)
 {
 for (int i = j; i < a.length; i += 8) {
 sb.append(a[i]);
 }
 sb.append('\\');
 }
 System.out.println(sb);
 String[] s=new String[8];
 String s1=sb.toString();
 for(int i=0;i<s1.length();i+=4)
 s[0]=s1.substring(4);

解决方案 »

  1.   

    感觉差不多public class PrintPoem {
    public static void main(String[] args) {
    String str="月落乌啼霜满天,江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。";

    str=str.replaceAll(",","").replaceAll("。", "");

    char poem[] = str.toCharArray();
    for (int i = 0; i < 7; i++) {
    System.out.print(poem[i]);
    System.out.print(poem[i+7]);
    System.out.print(poem[i+7+7]);
    System.out.print(poem[i+7+7+7]);
    System.out.println("");
    }

    }
    }
      

  2.   

    开始没看到public class PrintPoem {
    public static void main(String[] args) {
    String str="月落乌啼霜满天,江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。";

    //str=str.replaceAll(",","").replaceAll("。", "");

    char poem[] = str.toCharArray();
    for (int i = 0; i < 8; i++) {
    System.out.print(poem[i]);
    System.out.print(poem[i+8]);
    System.out.print(poem[i+8+8]);
    System.out.print(poem[i+8+8+8]);
    System.out.println("");
    }

    }
    }
      

  3.   

    效率最高可能是这个了:
    public class PrintPoem {
        public static void main(String[] args) {
                System.out.println("月江姑夜" );
                System.out.println("落枫苏半");
                System.out.println("乌渔城钟");
                System.out.println("啼火外声");
                System.out.println("霜对寒到");
                System.out.println("满愁山客 ");
                System.out.println("天眠寺船 ");
                System.out.println(",。,。 "); 
         }
    }  //这个有点玩笑了其次是这个了吧:public class PrintPoem {
        public static void main(String[] args) {
            String str="月落乌啼霜满天,江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。";
             for (int i = 0; i < 8; i++) {
                for(int j =0;j<4;j++){
                 System.out.print(str.charAt(i+j*8));
                }
                System.out.println("");
            }
        
        }
    }
      

  4.   

    这样是不是太局限了,不是所有的都+8,为什么不能先统计长度呢,如length()是不是会好些
      

  5.   


    public class PrintPoem {
        public static void main(String[] args) {
            String str="月落乌啼霜满天,江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。";
            int index=0;
            char poem[][] = new char[4][8];
            for (int i = 0; i < 4; i++) {
    for(int j=0; j<8; j++) {
    poem[i][j] = str.charAt(index++);
    }
            } for(int i=0; i<8; i++) {
    for(int j=3; j>=0; j--){
    System.out.print(poem[j][i] + "  ");
    }
    System.out.println();
    }
        }
    }