/*******************************************************************************
?*
?* 對數字或文件名排列
?*
?* 沒有考慮漢字顯示時占兩個位置的情況,即對文件名處理不太好
?*
?* 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 )+"\t" );
??? //★整數部分,從小數點左位向左移
??? int pointer=( dot>-1 ? dot-1 : stringLength-1 );
??? for( int 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 );
??????? for( int 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( "\r\n-------------------------------------------\r\n" );
??? String[] number={ "",
????????????????????? ".",
????????????????????? ".5",
????????????????????? ".56",
????????????????????? ".567",
????????????????????? ".5678",
????????????????????? "1234",
????????????????????? "1234.",
????????????????????? "1234.5",
????????????????????? "1234.56",
????????????????????? "1234.567",
????????????????????? "1234.5678" };
??? for( int i=0; i<number.length; i++ )
?????? {
???????? System.out.println( "["+DotAlign.align( number[i], ' ', '0', 7, 2, true )+"]?? ["+number[i]+"]" );
?????? }
??? System.out.println( "\r\n-------------------------------------------\r\n" );
??? String[] file={ "",
??????????????????? ".",
??????????????????? ".j",
??????????????????? ".jp",
??????????????????? ".jpe",
??????????????????? ".jpeg",
??????????????????? "1234",
??????????????????? "1234.",
??????????????????? "1234.j",
??????????????????? "1234.jp",
??????????????????? "1234.jpe",
??????????????????? "1234.jpeg" };
??? for( int i=0; i<file.length; i++ )
?????? {
???????? System.out.println( "["+DotAlign.align( file[i], ' ', ' ', 7, 5, false )+"]?? ["+file[i]+"]" );
?????? }
??? System.out.println( "\r\n-------------------------------------------\r\n" );
? }
}