001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.fukurou.util; 017 018 import java.util.Arrays ; 019 020 /** 021 * ToString.java ã¯ã€å?通的ã«ä½¿ç”¨ã•れã‚?toString() ã‚’ç°¡ç´?Œ–ã™ã‚‹ã‚¯ãƒ©ã‚¹ã§ã™ã? 022 * ãƒ?ƒãƒ?‚°æƒ??ã‚’å?力ã™ã‚‹æœ€ã‚‚ä¸?ˆ¬çš?ªæ–¹æ³•ã?ã€å?部æ–?—å?ã®å‡ºåŠ›ã§ã™ã? 023 * 通常ã€ã‚ーã¨å€¤ã‚’ã?ã‚¢ã§è¨˜è¿°ã™ã‚‹ãŸã‚ã€StringBuilder ã§ append ã—ãªãŒã‚‰ä½œæ?ã™ã‚‹ã«ã—ã¦ã‚? 024 * コーãƒ?‚£ãƒ³ã‚°çš?«ã‚ã¾ã‚Šè¦‹æ?ãˆã?良ã?½¢ã«ã¯ãªã‚Šã¾ã›ã‚“ã€? 025 * ã“ã“ã§ã¯ã€ãã‚Œã‚‰ã‚’ç°¡æ˜“çš„ã«æ•´å½¢ã—ã¦å‡ºåŠ›ã§ãるよã†ã«ã€ãƒ¡ã‚½ãƒ?ƒ‰ã‚’用æ„ã—ã¾ã—ãŸã€? 026 * 027 * @og.group ユーãƒ?‚£ãƒªãƒ?‚£ 028 * 029 * @version 4.0 030 * @author Kazuhiko Hasegawa 031 * @since JDK5.0, 032 */ 033 public final class ToString { 034 035 /** シスãƒ?ƒ ä¾å˜ã?改行記å·ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? */ 036 private static final String CR = System.getProperty("line.separator"); 037 038 /** ?”ã¤åˆ??スペã?スã§ã™ã? */ 039 private static final String SPACE = " " ; 040 /** ?“ã¤åˆ??カンマã§ã™ã? */ 041 private static final String COMMA = " , " ; 042 043 private final StringBuilder buf ; 044 045 /** æœ?¾Œã«æ”¹è¡Œè¨˜å·ã‚’å?れãŸã‹ã©ã?‹ã€?*/ 046 private boolean lastCR = true ; 047 048 /** ã‚ーæ–?—å?ã®æœ?¤§é•·(ã™ã¹ã¦ASCIIæ›ç®? */ 049 private int maxSize = 0; 050 051 /** 052 * タイトルを指定ã™ã‚‹ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ 053 * タイトルã¯ã€å?é ã«ã‚¹ãƒšã?スãªã—ã§å…¥ã‚Œã¾ã™ã?æœ?¾Œã?改行ã‚りã§ã™ã? 054 * 055 * @param title タイトルæ–?—å? 056 */ 057 public ToString( final String title ) { 058 buf = new StringBuilder( 200 ); 059 buf.append( "TITLE = [" ).append( title ).append( "]" ).append( CR ); 060 lastCR = true ; 061 } 062 063 /** 064 * 簡易的ã«ã‚ªãƒ–ジェクトを構築ã™ã‚?static メソãƒ?ƒ‰ 065 * タイトルã¯ã€å?é ã«ã‚¹ãƒšã?スãªã—ã§å…¥ã‚Œã¾ã™ã?æœ?¾Œã?改行ã‚りã§ã™ã? 066 * 067 * @param title タイトルæ–?—å? 068 * 069 * @return ToStringオブジェクãƒ? 070 */ 071 public static ToString title( final String title ) { 072 return new ToString( title ); 073 } 074 075 /** 076 * 改行ãªã—ã?ã‚ーã¨å€¤ã®ãƒšã‚¢ã‚’è¨å®šã—ã¾ã™ã? 077 * å‰å›žã€æ”¹è¡Œã§çµ‚ã‚ã£ã¦ã?‚‹å ´åˆã?ã€ã‚ーã‹ã‚‰å§‹ã‚ã¾ã™ã? 078 * ãã†ã§ãªã??åˆã?" , " ã‚’å?力ã—ã¦ã‹ã‚‰ã€æ›¸ãå§‹ã‚ã¾ã™ã? 079 * 080 * @param key ã‚ーæ–?—å? 081 * @param val 値æ–?—å? 082 * 083 * @return 自åˆ??身 084 */ 085 public ToString print( final String key,final Object val ) { 086 if( lastCR ) { buf.append( SPACE ); } 087 else { buf.append( COMMA ); } 088 lastCR = false; 089 090 if( key != null ) { 091 int len = key.length(); 092 if( len > maxSize ) { maxSize = len; } 093 buf.append( key ).append( " = [" ).append( String.valueOf( val ) ).append( "]" ); 094 } 095 else { 096 buf.append( " [" ).append( String.valueOf( val ) ).append( "]" ); 097 } 098 099 return this ; 100 } 101 102 /** 103 * 改行ã‚りã?ã‚ーã¨å€¤ã®ãƒšã‚¢ã‚’è¨å®šã—ã¾ã™ã? 104 * å‰å›žã€æ”¹è¡Œã§çµ‚ã‚ã£ã¦ã?‚‹å ´åˆã?ã€ã‚ーã‹ã‚‰å§‹ã‚ã¾ã™ã? 105 * ãã†ã§ãªã??åˆã?" , " ã‚’å?力ã—ã¦ã‹ã‚‰ã€æ›¸ãå§‹ã‚ã¾ã™ã? 106 * 107 * @param key ã‚ーæ–?—å? 108 * @param val 値æ–?—å? 109 * 110 * @return 自åˆ??身 111 */ 112 public ToString println( final String key,final Object val ) { 113 print( key,val ); 114 115 buf.append( CR ); 116 lastCR = true; 117 return this ; 118 } 119 120 /** 121 * 改行ãªã—ã?ã‚ーã¨å€¤é…å?ã®ãƒšã‚¢ã‚’è¨å®šã—ã¾ã™ã? 122 * å‰å›žã€æ”¹è¡Œã§çµ‚ã‚ã£ã¦ã?‚‹å ´åˆã?ã€ã‚ーã‹ã‚‰å§‹ã‚ã¾ã™ã? 123 * ãã†ã§ãªã??åˆã?" , " ã‚’å?力ã—ã¦ã‹ã‚‰ã€æ›¸ãå§‹ã‚ã¾ã™ã? 124 * 125 * @param key ã‚ーæ–?—å? 126 * @param val 値é…å? 127 * 128 * @return 自åˆ??身 129 */ 130 public ToString print( final String key,final Object[] val ) { 131 String str = Arrays.toString( val ); 132 return print( key,str.substring( 1,str.length()-1 ) ); 133 } 134 135 /** 136 * 改行ã‚りã?ã‚ーã¨å€¤é…å?ã®ãƒšã‚¢ã‚’è¨å®šã—ã¾ã™ã? 137 * å‰å›žã€æ”¹è¡Œã§çµ‚ã‚ã£ã¦ã?‚‹å ´åˆã?ã€ã‚ーã‹ã‚‰å§‹ã‚ã¾ã™ã? 138 * ãã†ã§ãªã??åˆã?" , " ã‚’å?力ã—ã¦ã‹ã‚‰ã€æ›¸ãå§‹ã‚ã¾ã™ã? 139 * 140 * @param key ã‚ーæ–?—å? 141 * @param val 値é…å? 142 * 143 * @return 自åˆ??身 144 */ 145 public ToString println( final String key,final Object[] val ) { 146 String str = Arrays.toString( val ); 147 return println( key,str.substring( 1,str.length()-1 ) ); 148 } 149 150 /** 151 * 改行ã?ã¿è¨å®šã—ã¾ã™ã? 152 * 153 * @return 自åˆ??身 154 */ 155 public ToString println() { 156 buf.append( CR ); 157 lastCR = true; 158 return this; 159 } 160 161 /** 162 * 改行付ãã®å€¤ã®ã¿è¨å®šã—ã¾ã™ã? 163 * 164 * @param val 値 165 * 166 * @return 自åˆ??身 167 */ 168 public ToString println( final Object val ) { 169 return println( null,val ); 170 } 171 172 /** 173 * 改行付ãã®å€¤ã®ã¿è¨å®šã—ã¾ã™ã? 174 * 175 * @param val 値 176 * 177 * @return 自åˆ??身 178 */ 179 public ToString println( final Object[] val ) { 180 String str = Arrays.toString( val ); 181 return println( null,str.substring( 1,str.length()-1 ) ); 182 } 183 184 /** 185 * å…ˆé?ã®ã‚ーã®ä½ç½®ã‚’最大値ã«åˆã‚ã›ã¦ã€æ•´å½¢ã—ã¾ã™ã? 186 * 187 * @return 自åˆ??身 188 */ 189 public ToString fixForm() { 190 String searchKey = CR + SPACE ; 191 int skLen = searchKey.length() ; 192 193 char[] ch = new char[maxSize]; 194 Arrays.fill( ch,' ' ); 195 String MAX_SPACE = new String( ch ); 196 197 int adrs = buf.indexOf( searchKey ); 198 while( adrs >= 0 ) { 199 int eq = buf.indexOf( "=",adrs ); 200 if( eq >= 0 && buf.charAt(adrs+skLen) != ' ' ) { 201 int nextAdrs = buf.indexOf( searchKey,adrs+skLen ); 202 if( nextAdrs < 0 || eq < nextAdrs ) { 203 buf.insert( eq, MAX_SPACE.substring( eq-(adrs+skLen)-1 ) ); 204 } 205 } 206 adrs = buf.indexOf( searchKey,adrs+skLen ); 207 } 208 209 return this; 210 } 211 212 /** 213 * å†?ƒ¨ãƒãƒƒãƒ•ã‚¡ã‚’æ–‡å—å?ã«ã—ã¦è¿”ã—ã¾ã™ã? 214 * 215 * @return å†?ƒ¨ãƒãƒƒãƒ•ã‚¡ã‚’æ–‡å—å?ã«ã—ã¦è¿”ã—ã¾ã™ã? 216 */ 217 @Override 218 public String toString() { 219 return buf.toString() ; 220 } 221 }