⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewutil.java

📁 非常重要的数学处理函数和字符串处理函数。
💻 JAVA
字号:
package org.xinguan.common.util;

@SuppressWarnings("unused")
public final class ViewUtil
{
  private final static String SHOW_LINE="\r\n";

  // ////////////////////////////////////////////
  // 表格定义
  
//-----------------------------------------------------
//  private final static String LU_CHAR="┌";
//
//  private final static String LM_CHAR="├";
//
//  private final static String LB_CHAR="└";
//
//  private final static String RU_CHAR="┐";
//
//  private final static String RM_CHAR="┤";
//
//  private final static String RB_CHAR="┘";
//
//  private final static String UL_CHAR="┌";
//
//  private final static String UM_CHAR="┬";
//
//  private final static String UR_CHAR="┐";
//
//  private final static String ML_CHAR="├";
//
//  private final static String MR_CHAR="┤";
//
//  private final static String MU_CHAR="┬";
//
//  private final static String MB_CHAR="┴";
//
//  private final static String MM_CHAR="┼";
//
//  private final static String MM_LOCT="+";
//
//  private final static String BL_CHAR="└";
//
//  private final static String BM_CHAR="┴";
//
//  private final static String BR_CHAR="┘";
//
//  private final static String VV_CHAR="│";
//
//  private final static String HH_CHAR="─";
  
  //-----------------------------------------------------
  private final static String LU_CHAR="+";

  private final static String LM_CHAR="+";

  private final static String LB_CHAR="+";

  private final static String RU_CHAR="+";

  private final static String RM_CHAR="+";

  private final static String RB_CHAR="+";

  private final static String UL_CHAR="+";

  private final static String UM_CHAR="+";

  private final static String UR_CHAR="+";

  private final static String ML_CHAR="+";

  private final static String MR_CHAR="+";

  private final static String MU_CHAR="+";

  private final static String MB_CHAR="+";

  private final static String MM_CHAR="+";

  private final static String MM_LOCT="+";

  private final static String BL_CHAR="+";

  private final static String BM_CHAR="+";

  private final static String BR_CHAR="+";

  private final static String VV_CHAR="|";

  private final static String HH_CHAR="-";

//-----------------------------------------------------
  
  private final static String TABLE_LEFT="   ";

  private final static double TABLE_FACT=1.5;

  private final static int TABLE_ROW_SIZE=5;

  private final static String TABLE_ROW_NAME="RowID";

  // ////////////////////////////////////////////
  // Byte定义
  private final static String BYTES_LEFT_PAD="   ";

  private final static String BYTES_MID_PAD=" ";

  public final static short VIEW_LEFT=0x0002;

  public final static short VIEW_BYTE_ADDR=0x0004;

  public final static short VIEW_BYTE_EXPL=0x0010;

  public static String viewBytes(byte[] bytes)
  {
    return viewBytes(bytes,0,bytes.length,16,VIEW_LEFT|VIEW_BYTE_ADDR|VIEW_BYTE_EXPL);
  }

  public static String viewBytes(byte[] bytes,int showlen)
  {
    return viewBytes(bytes,0,showlen,16,VIEW_LEFT|VIEW_BYTE_ADDR|VIEW_BYTE_EXPL);
  }

  public static String viewBytes(byte[] bytes,int start,int showlen)
  {
    return viewBytes(bytes,start,showlen,16,VIEW_LEFT|VIEW_BYTE_ADDR|VIEW_BYTE_EXPL);
  }

  /**
   * 显示字节数字信息
   * @param bytes 数据
   * @param start 起始位置
   * @param showlen 长度
   * @param colwidth 列宽
   * @param lpad 是否左补齐
   * @param address 是否显示地址
   * @param explain 是否解释字符
   */
  public static String viewBytes(byte[] bytes,int start,int showlen,int colwidth,int conf)
  {
    boolean lpad=(conf&VIEW_LEFT)!=0,address=(conf&VIEW_BYTE_ADDR)!=0,explain=(conf|VIEW_BYTE_EXPL)!=0;

    StringBuffer sb=new StringBuffer("");

    if(start+showlen>bytes.length)
    {
      showlen=bytes.length-start;
    }

    int showrows=showlen/colwidth;

    if(showlen%colwidth!=0)
    {
      showrows=showrows+1;
    }

    for(int i=0,ccurpos=0,dcurpos=0;i<showrows;i++)
    {
      if(lpad)
      {
        sb.append(BYTES_LEFT_PAD);
      }

      if(address)
      {
        sb.append(linenum(6,dcurpos+start));
        sb.append(BYTES_MID_PAD);
      }

      for(int j=0;j<colwidth;dcurpos++,j++)
      {
        if(dcurpos<showlen)
        {
          String HexVal=Integer.toHexString(MathUtil.usbyte(bytes[start+dcurpos]));

          if(HexVal.length()==1)
          {
            HexVal="0"+HexVal;
          }

          sb.append(HexVal.toUpperCase());

          sb.append(" ");
        }
        else
        {
          sb.append("   ");
        }
      }

      sb.append(BYTES_MID_PAD);

      if(explain)
      {
        for(int j=0;j<colwidth&&ccurpos+start<bytes.length;ccurpos++,j++)
        {
          if(ccurpos<showlen)
          {
            if(bytes[ccurpos+start]>32&&bytes[ccurpos+start]<127)
            {
              sb.append((char)bytes[ccurpos+start]);
            }
            else
            {
              sb.append(".");
            }
          }
          else
          {
            sb.append(" ");
          }
        }
      }

      if(i!=showrows-1)
      {
        sb.append(SHOW_LINE);
      }
    }

    return sb.substring(0,sb.length());
  }

  private static String linenum(int showlen,int line)
  {
    String hvalue=Integer.toHexString(line);

    for(int len=hvalue.length();len<showlen;len++)
    {
      hvalue="0"+hvalue;
    }

    String dvalue=Integer.toString(line);

    for(int len=dvalue.length();len<showlen;len++)
    {
      dvalue="0"+dvalue;
    }

    return hvalue.toUpperCase()+":"+dvalue;
  }

  /**
   * 显示表格
   * @param name 显示表名称
   * @param hsizes 头部大小
   * @param headers 头部名称
   * @param table 数据内容
   * @param curpage 当前页
   * @param pagesize 页大小
   */
  public static String viewTable(String name,int[] hsizes,String[] headers,String[][] table,int curpage,int pagesize)
  {
    if(pagesize<=0)
    {
      pagesize=10;
    }

    if(curpage<0)
    {
      curpage=0;
    }

    if(curpage*pagesize>table.length)
    {
      curpage=table.length/pagesize;
    }

    int allpage=table.length/pagesize;

    if(table.length%pagesize!=0)
    {
      allpage=allpage+1;
    }

    StringBuffer buffer=new StringBuffer();

    int mwidth=hsizes.length;// +

    int dwidth=0;

    for(int idx=0;idx<hsizes.length;idx++)
    {
      dwidth+=Math.abs(hsizes[idx]);
    }

    // 十字光标
    buffer.append(MM_LOCT+SHOW_LINE);

    // 头部信息
    buffer.append(TABLE_LEFT);

    buffer.append(LU_CHAR);

    for(int idx=0;idx<dwidth+mwidth+TABLE_ROW_SIZE;idx++)
    {
      buffer.append(HH_CHAR);
    }

    buffer.append(RU_CHAR);

    buffer.append(SHOW_LINE);

    // 表格名称
    buffer.append(TABLE_LEFT);

    buffer.append(VV_CHAR+centerString(NullUtil.nullString(name),dwidth+mwidth+TABLE_ROW_SIZE)+VV_CHAR);

    buffer.append(SHOW_LINE);

    // 准备头部
    buffer.append(TABLE_LEFT);

    buffer.append(LM_CHAR);

    for(int idx=0;idx<TABLE_ROW_SIZE;idx++)
    {
      buffer.append(HH_CHAR);
    }

    buffer.append(MU_CHAR);

    for(int idx=0;idx<hsizes.length;idx++)
    {
      for(int jdx=0;jdx<Math.abs(hsizes[idx]);jdx++)
      {
        buffer.append(HH_CHAR);
      }

      if(idx<hsizes.length-1)
      {
        buffer.append(MU_CHAR);
      }
    }

    buffer.append(RM_CHAR);

    buffer.append(SHOW_LINE);

    // 显示表头
    buffer.append(TABLE_LEFT);

    buffer.append(VV_CHAR);

    buffer.append(centerString(TABLE_ROW_NAME,TABLE_ROW_SIZE));

    buffer.append(VV_CHAR);

    for(int idx=0;idx<hsizes.length;idx++)
    {
      buffer.append(centerString(headers[idx],hsizes[idx]));

      if(idx<hsizes.length-1)
      {
        buffer.append(VV_CHAR);
      }
    }

    buffer.append(VV_CHAR);

    buffer.append(SHOW_LINE);

    // 封装表头
    buffer.append(TABLE_LEFT);

    buffer.append(LM_CHAR);

    for(int idx=0;idx<TABLE_ROW_SIZE;idx++)
    {
      buffer.append(HH_CHAR);
    }

    buffer.append(table.length>curpage*pagesize?MM_CHAR:MB_CHAR);

    for(int idx=0;idx<hsizes.length;idx++)
    {
      for(int jdx=0;jdx<Math.abs(hsizes[idx]);jdx++)
      {
        buffer.append(HH_CHAR);
      }

      if(idx<hsizes.length-1)
      {
        buffer.append(table.length>curpage*pagesize?MM_CHAR:MB_CHAR);
      }
    }

    buffer.append(RM_CHAR);

    buffer.append(SHOW_LINE);

    // 显示数据

    for(int ddx=0;ddx<pagesize&&ddx<table.length-curpage*pagesize;ddx++)
    {
      buffer.append(TABLE_LEFT);

      buffer.append(VV_CHAR);

      buffer.append(centerString((curpage*pagesize+ddx+1)+"",TABLE_ROW_SIZE));

      buffer.append(VV_CHAR);

      for(int idx=0;idx<hsizes.length;idx++)
      {
        buffer.append(centerString(table[curpage*pagesize+ddx][idx],hsizes[idx]));

        buffer.append(VV_CHAR);
      }

      buffer.append(SHOW_LINE);

      buffer.append(TABLE_LEFT);

      buffer.append(LM_CHAR);

      for(int idx=0;idx<TABLE_ROW_SIZE;idx++)
      {
        buffer.append(HH_CHAR);
      }

      buffer.append(table.length>curpage*pagesize+ddx+1?MM_CHAR:MB_CHAR);

      for(int idx=0;idx<hsizes.length;idx++)
      {
        for(int jdx=0;jdx<Math.abs(hsizes[idx]);jdx++)
        {
          buffer.append(HH_CHAR);
        }

        if(idx<hsizes.length-1)
        {
          buffer.append(table.length>curpage*pagesize+ddx+1?MM_CHAR:MB_CHAR);
        }
      }

      buffer.append(RM_CHAR);

      buffer.append(SHOW_LINE);
    }

    // 表格统计
    buffer.append(TABLE_LEFT);

    String stat="CurPage:"+(allpage>0?curpage+1:0)+" TotPage:"+allpage+" RecCount:"+table.length;

    buffer.append(VV_CHAR+centerString(stat,dwidth+mwidth+TABLE_ROW_SIZE)+VV_CHAR);

    buffer.append(SHOW_LINE);

    // 显示表尾
    buffer.append(TABLE_LEFT);

    buffer.append(LB_CHAR);

    for(int idx=0;idx<dwidth+mwidth+TABLE_ROW_SIZE;idx++)
    {
      buffer.append(HH_CHAR);
    }

    buffer.append(RB_CHAR);

    buffer.append(SHOW_LINE);

    return buffer.toString();
  }

  private static String centerString(String string,int width)
  {
    int cncount=0,encount=0,sccount=string.length(),padlen=0;

    for(int idx=0;idx<sccount;idx++)
    {
      String istr=string.substring(idx,idx+1);

      if(istr.getBytes().length>1)
      {
        cncount++;
      }
      else
      {
        encount++;
      }
    }

    // 计算显示长度
    int showlen=encount;

    if(cncount%2==0)
    {
      showlen+=cncount*TABLE_FACT;
    }
    else
    {
      showlen+=(int)(cncount*TABLE_FACT)+1;
    }

    if(width>=0)
    {
      if(showlen>width)
      {
        return string;
      }

      padlen=(width-showlen)/2;

      return padstring(padlen," ")+string+padstring(width-padlen-showlen," ");
    }
    else
    {
      return padstring(width*-1-showlen," ")+string;
    }
  }

  public static String padstring(int count,String pad)
  {
    StringBuffer buffer=new StringBuffer();

    for(int idx=0;idx<count;idx++)
    {
      buffer.append(pad);
    }

    return buffer.toString();
  }

  public static void main(String[] args)
  {
    byte[] bytes=new byte[23000];

    ByteUtil.writeInt(bytes,0,10);

    ByteUtil.writeBytes(bytes,4,"1234567890".getBytes(),0,10);

    System.out.println(viewBytes(bytes,0,100,16,ViewUtil.VIEW_BYTE_ADDR|ViewUtil.VIEW_BYTE_ADDR|ViewUtil.VIEW_BYTE_EXPL));

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -