〔Java〕对数字或文件名排列

/** *****************************************************************************
 *
 * 对数字或文件名排列
 *
 * 没有考虑汉字显示时占两个位置的情况,即对文件名处理不太好
 *
 * Author: NeedJava
 *
 * Modified: 2007.09.09
 *
 *****************************************************************************
*/


public final class  DotAlign
{
  
private
 DotAlign(){}

  
private static final String align( String string, char prefix, char suffix, int prefixLength, int suffixLength, boolean
 isNumber )
  {
    
if( string==null||string.equals( "" )||string.equals( "." )||prefixLength<0||suffixLength<0
 )
      {
        
return
 string;
      }

    
//如果没有小数,那么按照常理,小数点也应该省略

    char[] buffer=new char[( suffixLength>0 ? prefixLength+1+ suffixLength : prefixLength )];

    
int stringLength=
string.length();

    
int dot=stringLength-1
;

    
//找到小数点位置,可以用lastIndexOf()代替

    while( dot>-1  )
         {
           
if( string.charAt( dot-- )=='.'
 )
             {
               dot
++
;

               
break
;
             }
         }

    
//
System.out.print( Integer.toString( dot )+" " );

    
//★整数部分,从小数点左位向左移

    int pointer=( dot>-1 ? dot-1 : stringLength-1  );

    
forint i=prefixLength-1; i>-1; i--
 )
       {
         
if( pointer>-1
 )
           {
             buffer[i]
=string.charAt( pointer--
 );
           }
         
else{ buffer[i]=
prefix;
             }
       }

    
//如果没有小数部分,那么按照常理,小数点应该省略

    if( suffixLength>0  )
      {
        
//★小数点

        buffer[prefixLength]=( dot>-1||isNumber ? '.'  : suffix );

        
//★小数部分,从小数点右位向右移

        pointer=( dot>-1 ? dot+1  : stringLength );

        
forint i=prefixLength+1; i<buffer.length; i++
 )
           {
             
if( pointer<
stringLength )
               {
                 buffer[i]
=string.charAt( pointer++
 );
               }
             
else{ buffer[i]=
suffix;
                 }
           }
      }

    
return new
 String( buffer );
  }


  
public final static void
 main( String[] args )
  {
    System.out.println( 
" ------------------------------------------- "
 );

    String[] number
=""
,
                      
"."
,
                      
".5"
,
                      
".56"
,
                      
".567"
,
                      
".5678"
,
                      
"1234"
,
                      
"1234."
,
                      
"1234.5"
,
                      
"1234.56"
,
                      
"1234.567"
,
                      
"1234.5678"
 };

    
forint i=0; i<number.length; i++
 )
       {
         System.out.println( 
"["+DotAlign.align( number[i], ' ''0'72true )+"]   ["+number[i]+"]"
 );
       }

    System.out.println( 
" ------------------------------------------- "
 );

    String[] file
=""
,
                    
"."
,
                    
".j"
,
                    
".jp"
,
                    
".jpe"
,
                    
".jpeg"
,
                    
"1234"
,
                    
"1234."
,
                    
"1234.j"
,
                    
"1234.jp"
,
                    
"1234.jpe"
,
                    
"1234.jpeg"
 };

    
forint i=0; i<file.length; i++
 )
       {
         System.out.println( 
"["+DotAlign.align( file[i], ' '' '75false )+"]   ["+file[i]+"]"
 );
       }

    System.out.println( 
" ------------------------------------------- "
 );
  }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值