/*
 * 实现文字竖排  Valign.java
 */
public class HengpaiDemo {
public static void main(String[] args) {
/*
 * 实现文字竖排  Valign.java
 */
String str="刷卡的将阿四大四大阿四大四大去亲吻";
String s=valign(str,5);
System.out.println(s);
}
       public static String valign(String str,int size){
        int rows=size;
        int cols=str.length()/size;
        if(str.length()%size!=0){
        cols++;
        }
        int idx=0;
        char[] chs=new char[cols*rows];
        for(int i=cols-1;i>=0;i--){
        for(int j=0;j<rows;j++){
        if(idx==str.length()){
        chs[j*cols+i]='~';
        }else{
        chs[j*cols+i]=str.charAt(idx++);//   某一个位置
        }
        }
        }
        String s="";
        for(int i=0;i<chs.length;i++){
        s+=chs[i];
        if((i+1)%cols==0){   //折行
        s+='\n';
       }
        }
        return s;
       }
}
能否比这个码还能更简练些的,可拿出来晒晒(不包括符号的)

解决方案 »

  1.   

    拿去发在javaeye 上面吧,那上面讨论的比较热烈,   CSDN很少
      

  2.   

    虽然不知道你写的是什么,有啥用处,但这里int cols=str.length()/size;
    if(str.length()%size!=0){
      cols++;
    }可以改成这样:int cols = (str.length() + size - 1) / size;
      

  3.   

    这样行不?public class Valign {    public static void main(String[] args) {
            String str = "各位啊我的意思是大家也能码个简介的";
            String v = valign(str, 5);
            System.out.println(v);
        }    public static String valign(String str, int size) {
            char[] chs = str.toCharArray();
            int col = (chs.length + size - 1) / size;
            int st = (col - 1) * size;
            char[] out = new char[(col + 1) * size - 1];
            for(int i = 0, k = 0; i < size; i++) {
                if(i > 0) {
                    out[k++] = '\n';
                }
                for(int j = st + i; j >= 0; j -= size) {
                    out[k++] = (j >= chs.length) ? '~' : chs[j];
                }
            }
            return new String(out);
        }
    }实际上用一个循环也能做到,但比较难算一些,呵呵
      

  4.   

    package com.database;
    /*
    *
    * 实现文字竖排 Valign.java
    */
    public class HengpaiDemo
    {
    public static void main(String[] args) 
    {
    /*
    * 实现文字竖排 Valign.java
    */
    String str="刷卡的将阿四大四大阿四大四大去亲吻";
    String s=valign(str,5);
    System.out.println(s);
    }
      public static String valign(String str,int size)
      {
      int rows=size;//行数
      int cols=str.length()/size;//一行有多少字符
      if(str.length()%size!=0)
      {
      cols++;
      }
      int idx=0;
      StringBuffer sb=new StringBuffer();//创建一个缓冲字符串
      for(int i=0;i<rows;i++)
      {
      for(int j=cols-1;j>=0;j--)
      {
      idx=i+j*rows;//一次循环获得0|5|10|15 下标    二次循环1|6|11|16|17下标 
      if(idx<str.length())//是否超过了 文本的字符串的长度
      {
    sb.append(str.charAt(idx));
      }
      else
      {
      sb.append("~");//如果字符够用用‘~’
      }
      if(j%cols==0)//多少字符后追加回车符号
      {
      sb.append("\n");
      }
      }
      }
      return sb.toString();
      }
    }
      

  5.   

    这个问题纯粹就是个凑代码的
    既然楼主挑战简洁
    鄙人不才 见笑了 public static String valign(String str, int size) {
    int temp = (str.length() - 1) / size + 1;
    char[] chars = new char[++temp * size];
    char[] source = str.toCharArray();
    for(int i = 0; i < chars.length; i++){
    chars[i] = temp - i % temp < 2 ? '\n' : 
    (temp - i % temp - 2) * size + i / temp >= source.length? '~' : 
    source[(temp - i % temp - 2) * size + i / temp];
    }
    return new String(chars);
    }
      

  6.   

    public static String valign(String str, int size) {
    char[] chars = str.toCharArray();
    int len = chars.length;
    int col = (len + size - 1) / size;
    char[] data = new char[size * col + size - 1];
    for (int i = 0; i < col * size; i++)
    data[(i % size) * (col + 1) + (col - 1 - i / size)] = i < len ? chars[i]
    : '~';
    for (int i = 0; i < size - 1; i++)
    data[col + i * (col + 1)] = '\n';
    return new String(data);
    }