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.awt.Color;
019 import java.io.PrintWriter;
020 import java.io.StringWriter;
021 import java.io.UnsupportedEncodingException;
022 import java.net.URLEncoder;
023 import java.net.URLDecoder;
024 import java.util.ArrayList;
025 import java.util.Arrays;
026 import java.util.Enumeration;
027 import java.util.HashMap;
028 import java.util.Iterator;
029 import java.util.Map;
030 import java.util.StringTokenizer;
031 import java.nio.charset.Charset; // 5.5.2.6 (2012/05/25)
032
033
034 /**
035 * StringUtil.java ã¯ã€å?通的ã«ä½¿ç”¨ã•れã‚?String関連メソãƒ?ƒ‰ã‚’集ç´?—ãŸã?クラスã§ã™ã?
036 *
037 * @og.group ユーãƒ?‚£ãƒªãƒ?‚£
038 *
039 * @version 4.0
040 * @author Kazuhiko Hasegawa
041 * @since JDK5.0,
042 */
043 public final class StringUtil {
044
045 /** ãƒãƒƒãƒ•ã‚¡ã®åˆæœŸå®¹é‡ã‚’通常より多ã„ç›®ã«è¨å®šã—ã¾ã™ã?(200) */
046 private static final int BUFFER_MIDDLE = 200;
047
048 /** シスãƒ?ƒ ä¾å˜ã?改行記å·ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? */
049 private static final String CR = System.getProperty("line.separator");
050
051 /**
052 * プラãƒ?ƒˆãƒ•ォーãƒ?¾å˜ã?ãƒ?ƒ•ォルトã? Charset ã§ã™ã?
053 * プラãƒ?ƒˆãƒ•ォーãƒ?¾å˜æ?ã‚’è?æ…®ã™ã‚‹å ´åˆã?エンコード指定ã§ä½œæ?ã—ã¦ãŠã事をãŠå‹§ã‚ã—ã¾ã™ã?
054 *
055 * @og.rev 5.5.2.6 (2012/05/25) findbugs対�
056 */
057 public static final Charset DEFAULT_CHARSET = Charset.defaultCharset() ;
058
059 /**
060 * ãƒ?ƒ•ォルトコンストラクターをprivateã«ã—ã¦ã€?
061 * オブジェクトã?生æ?ã‚’ã•ã›ãªã?‚ˆã?«ã™ã‚‹ã€?
062 *
063 */
064 private StringUtil() {}
065
066 /**
067 * UTF-8 ã§ã€URLエンコードを行ã„ã¾ã™ã?
068 * ã“ã?メソãƒ?ƒ‰ã¯ã€JDK1.4 以上ã§ãªã?¨ä½¿ç”¨ã§ãã¾ã›ã‚“ã€?
069 *
070 * @param value エンコードã™ã‚‹æ–‡å—å?
071 *
072 * @return æŒ?®šã?æ–?—コードã§?µ?²?¬ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸæ–?—å?
073 */
074 public static String urlEncode( final String value ) {
075 if( value == null ) { return ""; }
076
077 try {
078 return URLEncoder.encode( value,"UTF-8" );
079 }
080 catch( UnsupportedEncodingException ex ) {
081 String errMsg = "UnsupportedEncodingException [UTF-8]" + CR
082 + ex.getMessage() ;
083 throw new RuntimeException( errMsg,ex );
084 }
085 catch( RuntimeException ex2 ) { // 3.6.0.0 (2004/09/17)
086 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ value=[" + value + "] , encode=[UTF-8]" + CR
087 + ex2.getMessage();
088 throw new RuntimeException( errMsg,ex2 );
089 }
090 }
091
092 /**
093 * UTF-8 ã§URLエンコードã•ã‚ŒãŸæ–?—å?をデコードã—ã¾ã™ã?
094 * ã“ã?メソãƒ?ƒ‰ã¯ã€JDK1.4 以上ã§ãªã?¨ä½¿ç”¨ã§ãã¾ã›ã‚“ã€?
095 *
096 * @og.rev 5.4.5.0 追�
097 * @param value ãƒ?‚³ãƒ¼ãƒ‰ã™ã‚‹æ–‡å—å?
098 *
099 * @return ãƒ?‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸæ–?—å?
100 */
101 public static String urlDecode( final String value ) {
102 try {
103 return URLDecoder.decode( value,"UTF-8" );
104 }
105 catch( UnsupportedEncodingException ex ) {
106 String errMsg = "UnsupportedEncodingException [UTF-8]" + CR
107 + ex.getMessage() ;
108 throw new RuntimeException( errMsg,ex );
109 }
110 catch( RuntimeException ex2 ) { // 3.6.0.0 (2004/09/17)
111 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ value=[" + value + "] , encode=[UTF-8]" + CR
112 + ex2.getMessage();
113 throw new RuntimeException( errMsg,ex2 );
114 }
115 }
116
117 /**
118 * æ–?—å?ã®å¾Œã‚ã®ã‚¹ãƒšã?スを削除ã—ã¾ã™ã?
119 * String クラス㮠trim()メソãƒ?ƒ‰ã¯ã€æ–‡å—å?ã®ä¸¡æ–¹ã®ã‚¹ãƒšã?スを削除ã—ã¾ã™ãŒã€?
120 * ã“ã? rTrim( String ) ã¯ã€å¾Œã‚ã®åŠè§’スペã?スã®ã¿ã€è©°ã‚ã¾ã™ã?
121 * 注æ„ï¼?\u0020' (スペã?スæ–?? よりå°ã•ã?–‡å—ã‚’åˆ?‚Šå–りã¾ã™ã?
122 *
123 * @param str å…??æ–?—å?
124 *
125 * @return 後ã‚ã®åŠè§’スペã?スを詰ã‚ãŸã€æ–°ã—ã„æ–?—å?
126 */
127 public static String rTrim( final String str ) {
128 if( str == null ) { return null; }
129 int count = str.length();
130
131 int len = count;
132
133 while ((0 < len) && (str.charAt(len-1) <= ' ')) {
134 len--;
135 }
136 return (len < count) ? str.substring(0, len) : str;
137 }
138
139 /**
140 * æ–?—å?ã®å¾Œã‚ã‹ã‚‰ã€? .0" ã®æ–?—を削除ã—ãŸæ•°å—åž‹æ–?—å?ã‚’è¿”ã—ã¾ã™ã?
141 * æ•°å—åž‹æ–?—å?ã¯ã€å?力文å—å?ã®å¾Œã‚㮠スペã?スã€å°æ•°ç‚¹ã€ã‚¼ãƒã‚’削除ã—ã¾ã™ã?
142 * ã¾ãŸã?å…ˆé?ãŒã?"." ã§å§‹ã¾ã‚‹å?åˆã?ã€?0" を追åŠ?—ã¾ã™ã?
143 * � "123.00" �"123" , ".123" �"0.123"
144 *
145 * @og.rev 3.8.8.1 (2007/01/10) æ–°è¦ä½œæ?
146 *
147 * @param str å…??æ–?—å?
148 *
149 * @return æ•°å—æ–‡å—å?化ã•れãŸã€æ–°ã—ã„æ–?—å?
150 */
151 public static String toNumber( final String str ) {
152 if( str == null ) { return null; }
153
154 String rtn = str.trim() ;
155
156 int adrs = rtn.indexOf( '.' );
157 int count = rtn.length();
158 int len = count;
159
160 if( adrs >= 0 ) {
161 while ((adrs < len) && ( ".0".indexOf( rtn.charAt(len-1) ) >= 0 )) {
162 len--;
163 }
164 }
165
166 if( len < count ) { rtn = rtn.substring(0, len); }
167 if( adrs == 0 ) { rtn = "0" + rtn; }
168
169 return rtn ;
170 }
171
172 /**
173 * æ–?—å?ã®å‰æ–¹ã®ã‚¼ãƒ(??を削除ã—ã¾ã™ã?
174 * å…ˆé?ã®?を削除ã™ã‚‹ã¾ãˆã«ã€trim ã—ã¦ã€ã‚¹ãƒšã?スを削除ã—ã¦ãŠãã¾ã™ã?
175 *
176 * @og.rev 3.5.4.5 (2004/01/23) æ–°è¦è¿½åŠ?
177 *
178 * @param in å…??æ–?—å?
179 *
180 * @return 剿–¹ã®ã‚¼ãƒ(??を削除ã—ãŸã€æ–°ã—ã„æ–?—å?
181 */
182 public static String lTrim0( final String in ) {
183 if( in == null ) { return null; }
184 String str = in.trim();
185 int count = str.length();
186
187 int len = 0;
188
189 while ((count > len) && (str.charAt(len) == '0')) {
190 len++;
191 }
192
193 if( len == 0 ) { return str; } // å…ˆé?ãŒã‚¼ãƒã§ãªã??
194 else if( len == count ) { return "0"; } // ã™ã¹ã¦ãŒã‚¼ãƒ
195 else if( str.charAt(len) == '.' ) { return "0" + str.substring(len); }
196 else { return str.substring(len); }
197 }
198
199 /**
200 * æ–?—å?é…å?ã®å?¦ç´??後ã‚ã®ã‚¹ãƒšã?スを削除ã—ã¾ã™ã?
201 * 個ã?ã®é…å?è¦ç´?«å¯¾ã—ã¦ã€rTrim( String str ) ã‚’é©ç”¨ã—ã¾ã™ã?
202 * å…??æ–?—å?é…å?ã«ç›´æŽ¥ä½œç”¨ã™ã‚‹ã®ã§ã¯ãªãã?æ–°ã—ã„æ–?—å?é…å?ã«
203 * çµæžœã‚’コピã?ã—ã¦è¿”ã—ã¾ã™ã?
204 * ãŸã ã—ã?å…??æ–?—å?é…å?ãŒã?null ã‹ã?length == 0 ã®å ´åˆã?ã€?
205 * å…??æ–?—å?é…å?(アドレス)ã‚’è¿”ã—ã¾ã™ã?
206 * 注æ„ï¼?\u0020' (スペã?スæ–?? よりå°ã•ã?–‡å—ã‚’åˆ?‚Šå–りã¾ã™ã?
207 *
208 * @param str å…??æ–?—å?
209 *
210 * @return 後ã‚ã®åŠè§’スペã?スを詰ã‚ãŸã€æ–°ã—ã„æ–?—å?
211 */
212 public static String[] rTrims( final String[] str ) {
213 if( str == null || str.length == 0 ) { return str; }
214
215 String[] rtn = new String[ str.length ];
216 for( int i=0; i<str.length; i++ ) {
217 rtn[i] = rTrim( str[i] );
218 }
219 return rtn ;
220 }
221
222 /**
223 * æ–?—å?ã®å‰å¾Œã?ãƒ?ƒ–ルクオートをå–り外ã—ã¾ã™ã?
224 * å‰å¾Œã«ãƒ?ƒ–ルクオートãŒå…¥ã£ã¦ã?ªã‘れã°ã€ãã®ã¾ã¾ã®æ–?—å?ã‚’è¿”ã—ã¾ã™ã?
225 * å‰å¾Œã«å…¥ã£ã¦ã?ªã?ç‰?–¹ã®ã¿ãªã©)å ´åˆã‚‚ã€ãã®ã¾ã¾ã®æ–?—å?ã‚’è¿”ã—ã¾ã™ã?
226 *
227 * @param str å…??æ–?—å?
228 *
229 * @return ãƒ?ƒ–ルクオートをå–り外ã—ãŸæ–°ã—ã„æ–?—å?
230 */
231 public static String csvOutQuote( final String str ) {
232 if( str == null ) { return null; }
233 int end = str.length();
234
235 if( end < 2 || str.charAt(0) != '"' || str.charAt( end-1 ) != '"' ) {
236 return str;
237 }
238
239 return str.substring( 1,end-1 ) ;
240 }
241
242 /**
243 * å†?ƒ¨ã§ä½¿ã‚れã‚?byte[] ã‹ã‚‰ String 生æ? メソãƒ?ƒ‰
244 *
245 * @param byteValue 変æ›ã™ã‚‹ãƒã‚¤ãƒˆå?
246 * @param start 変æ›é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹
247 * @param length 変æ›ãƒã‚¤ãƒˆæ•°
248 * @param encode 変æ›ã™ã‚‹æ–?—エンコーãƒ?
249 *
250 * @return 変æ›å¾Œæ–‡å—å?
251 */
252 public static String makeString( final byte[] byteValue, final int start, final int length,final String encode ) {
253
254 if( encode.startsWith( "Unicode" ) ) {
255 String errMsg = "Unicodeæ–?—å?ã¯ã€å¤‰æ›ã§ãã¾ã›ã‚“ã€?" + encode + "]" + CR;
256 throw new RuntimeException( errMsg );
257 }
258
259 String rtn = null;
260 if( byteValue != null ) {
261 try {
262 // encode コードã§å¤‰æ›ã•れã¦ã?‚‹ byte[] ã‚’ã?String ã«å¤‰æ›ã€?
263 rtn = new String( byteValue,start,length,encode );
264 } catch( UnsupportedEncodingException ex ) { // 変æ›ã‚³ãƒ¼ãƒ‰ãŒå˜åœ¨ã—ãªã?‚¨ãƒ©ãƒ¼
265 String errMsg = "æ–?—変æ›ã‚³ãƒ¼ãƒ‰ãŒå˜åœ¨ã—ã¾ã›ã‚“ã€?" + encode + "]" + CR
266 + ex.getMessage() ;
267 throw new RuntimeException( errMsg,ex );
268 }
269 }
270 return rtn;
271 }
272
273 /**
274 * æŒ?®šã?æ–?—å?ã‚’ãƒã‚¤ãƒˆã‚³ãƒ¼ãƒ‰ã«å¤‰æ›ã—ã¾ã™ã?
275 * å¼•æ•°ã®æ–?—å?ã?null ã®å ´åˆã?ã€return ã¯ã€byte[0] ã‚’è¿”ã—ã¾ã™ã?
276 *
277 * @param value 変æ›ã™ã‚‹ã‚¹ãƒˆãƒªãƒ³ã‚°å€¤
278 * @param encode 変æ›ã™ã‚‹æ–?—エンコーãƒ?
279 *
280 * @return 変æ›å¾Œæ–‡å—å?
281 */
282 public static byte[] makeByte( final String value,final String encode ) {
283 byte[] rtnByte = new byte[0];
284 if( value != null ) {
285 try {
286 rtnByte = value.getBytes( encode ); // byte[] ã« encode コードã§å¤‰æ›ã€?
287 } catch( UnsupportedEncodingException ex ) { // 変æ›ã‚³ãƒ¼ãƒ‰ãŒå˜åœ¨ã—ãªã?‚¨ãƒ©ãƒ¼
288 String errMsg = "æ–?—変æ›ã‚³ãƒ¼ãƒ‰ãŒå˜åœ¨ã—ã¾ã›ã‚“ã€?" + encode + "]" + CR
289 + ex.getMessage();
290 throw new RuntimeException( errMsg,ex );
291 }
292 }
293 return rtnByte;
294 }
295
296 /**
297 * åŠè§’スペã?スã§å›ºå®šé•·(åŠè§’æ›ç®—ã?æ•°)ã«å¤‰æ›ã—ãŸæ–?—å?ã‚’è¿”ã—ã¾ã™ã?
298 * åŠè§’スペã?ス埋ã‚ã¯ã€æ–‡å—ãŒåŠè§’ã?全角混在ã§ã‚‚ã‹ã¾ã?¾ã›ã‚“ã€?
299 * å†?ƒ¨ã«ã‚»ãƒ?ƒˆã—ãŸæ–?—å?ã¯ã€å¤‰åŒ–ã—ã¾ã›ã‚“ã€?
300 *
301 * @param str Fill埋ã‚ã™ã‚‹æ–?—å?
302 * @param su_fill Fill埋ã‚ã™ã‚‹æ–?—å?ã®é•·ã•ã?(åŠè§’æ›ç®—ã?æ•°)
303 *
304 * @return Fill埋ã‚ã—ãŸæ–°ã—ã„Stringã‚’è¿”ã™ã€?
305 */
306 public static String stringXFill( final String str,final int su_fill ) {
307 char[] charValue ;
308
309 if( str == null ) { charValue = new char[0]; }
310 else { charValue = str.toCharArray(); }
311 int len = charValue.length;
312
313 if( su_fill < len ) {
314 String errMsg = "å…??æ–?—æ•°ãŒãƒ•ォーãƒ?‚ˆã‚Šé•·ã?§ã™ã?(æ•°å—ãŒå£Šã‚Œã¾ã™ã?)"
315 + "su_fill[" + su_fill + "], len[" + len + "]" + CR
316 + "input=[" + str + "]" + CR;
317 throw new RuntimeException( errMsg );
318 }
319
320 char[] charbuf = new char[ su_fill ]; // ç§»ã?char é…å?ã‚’æ–°è¦ä½œæ?
321 Arrays.fill( charbuf,' ' );
322 System.arraycopy( charValue,0,charbuf,0,len );
323
324 return new String( charbuf ); // コピã?ã—ãŸé…å?å…¨ã¦ã‚’æ–‡å—å?ã«å¤‰æ›
325 }
326
327 /**
328 * åŠè§’スペã?スã§å›ºå®šé•·(åŠè§’æ›ç®—ã?æ•°)ã«å¤‰æ›ã—ãŸæ–?—å?ã‚’è¿”ã—ã¾ã™ã?
329 * åŠè§’スペã?ス埋ã‚ã¯ã€æ–‡å—ãŒåŠè§’ã?全角混在ã§ã‚‚ã‹ã¾ã?¾ã›ã‚“ã€?
330 * å†?ƒ¨ã«ã‚»ãƒ?ƒˆã—ãŸæ–?—å?ã¯ã€å¤‰åŒ–ã—ã¾ã›ã‚“ã€?
331 *
332 * @param str Fill埋ã‚ã™ã‚‹æ–?—å?
333 * @param su_fill Fill埋ã‚ã™ã‚‹æ–?—å?ã®é•·ã•ã?(åŠè§’æ›ç®—ã?æ•°)
334 * @param encode Fill埋ã‚ã™ã‚‹æ–?—å?ã®æ–?—エンコーãƒ?
335 *
336 * @return Fill埋ã‚ã—ãŸæ–°ã—ã„Stringã‚’è¿”ã™ã€?
337 */
338 public static String stringFill( final String str,final int su_fill,final String encode ) {
339 if( su_fill < 0 ) {
340 String errMsg = "æŒ?®šæ–‡å—æ•°ãŒè²?§ã™ã?[" + su_fill + "]";
341 throw new RuntimeException( errMsg );
342 }
343
344 byte[] byteValue = makeByte( str,encode );
345 int len = byteValue.length;
346
347 // å†?ƒ¨æ–?—å?ãŒæŒ‡å®šé•·ã‚ˆã‚Šé•·ã??å?
348 if( len >= su_fill ) {
349 return makeString( byteValue,0,su_fill,encode );
350 }
351 else {
352 byte[] space = makeByte( " ",encode );
353 int spaceLen = space.length ;
354 if( spaceLen == 4 ) { // encode ãŒã?UnicodeLittle ã®å ´åˆã?特殊å?ç?
355 space[0] = space[2];
356 space[1] = space[3];
357 spaceLen = 2;
358 }
359 byte[] bytebuf = new byte[ su_fill ];
360 for( int i=0; i<len; i++ ) { bytebuf[i] = byteValue[i]; }
361
362 int k = 0;
363 for( int j=len; j<su_fill; j++ ) { // ä½™ã£ãŸéƒ¨åˆ??ã€ã‚¹ãƒšã?ス埋ã‚
364 if( k >= spaceLen ) { k = 0; }
365 bytebuf[j] = space[k++];
366 }
367 return makeString( bytebuf,0,su_fill,encode ); // æ–°ãŸã«ã€ã™ã¹ã¦ã®é•·ã•ã?部åˆ?–‡å—å?を作æ?ã™ã‚‹ã€?
368 }
369 }
370
371 /**
372 * æ•´æ•°ã®ãƒ•ォーãƒ? 12 ã§ã€æ•´æ•°éƒ¨ ?‘ï¼’æ¡ã‚’表ã?ã«åˆã£ãŸæ–°ã—ã„æ–?—å?を作りã€ãれを返ã—ã¾ã™ã?
373 * 実行ã§ãã‚‹ã®ã¯ã€æ•´æ•°ã® String ã«å¯¾ã—ã¦ã®ã¿ã§ã™ã?
374 * å†?ƒ¨ã«ã‚»ãƒ?ƒˆã—ãŸæ–?—å?ã¯ã€å¤‰åŒ–ã—ã¾ã›ã‚“ã€?
375 *
376 * String str = StringUtil.intFill( "123",10 );
377 *
378 * å®Ÿè¡Œçµæžœ??0000000123"
379 *
380 * @param str æ•´æ•°ã® String
381 * @param su_fill フォーãƒ?‚’è¡¨ã™æ•°å?( 12 ã§ã€æ•´æ•°éƒ¨ ?‘ï¼’æ¡ã‚’表ã?
382 *
383 * @return æ•´æ•°ã®ãƒ•ォーãƒ?«åˆã£ãŸæ–‡å—å?
384 */
385 public static String intFill( final String str,final int su_fill ) {
386 if( su_fill < 0 ) {
387 String errMsg = "æŒ?®šæ–‡å—æ•°ãŒè²?§ã™ã?[" + su_fill + "]";
388 throw new RuntimeException( errMsg );
389 }
390
391 char[] charbuf = new char[ su_fill ]; // ç§»ã?char é…å?ã‚’æ–°è¦ä½œæ?
392 Arrays.fill( charbuf,'0' );
393
394 if( str == null ) { return new String( charbuf ); }
395
396 char[] charValue = str.toCharArray();
397 int len = charValue.length;
398
399 if( su_fill < len ) {
400 String errMsg = "å…??æ–?—æ•°ãŒãƒ•ォーãƒ?‚ˆã‚Šé•·ã?§ã™ã?(æ•°å—ãŒå£Šã‚Œã¾ã™ã?) su_fill[" + su_fill + "], len[" + len + "]";
401 throw new RuntimeException( errMsg );
402 }
403
404 System.arraycopy( charValue,0,charbuf,su_fill-len,len );
405
406 return new String( charbuf ); // コピã?ã—ãŸé…å?å…¨ã¦ã‚’æ–‡å—å?ã«å¤‰æ›
407 }
408
409 /**
410 * 全角スペã?スã§å›ºå®šé•·(åŠè§’æ›ç®—ã?æ•°)ã«å¤‰æ›ã—ãŸæ–?—å?ã‚’è¿”ã—ã¾ã™ã?
411 *
412 * @param str Fill埋ã‚ã™ã‚‹æ–?—å?
413 * @param su_fill Fill埋ã‚ã™ã‚‹æ–?—å?ã®é•·ã•ã?(åŠè§’æ›ç®—ã?æ•°)
414 * @param encode Fill埋ã‚ã™ã‚‹æ–?—å?ã®æ–?—エンコーãƒ?
415 *
416 * @return 全角スペã?スã§Fill埋ã‚ã—ãŸæ–°ã—ã„Stringã‚’è¿”ã™ã€?
417 */
418 public static String stringKFill( final String str,final int su_fill,final String encode ) {
419 if( su_fill < 0 ) {
420 String errMsg = "æŒ?®šæ–‡å—æ•°ãŒè²?§ã™ã?[" + su_fill + "]";
421 throw new RuntimeException( errMsg );
422 }
423
424 byte[] byteValue = makeByte( str,encode );
425 int len = byteValue.length;
426
427 // å†?ƒ¨æ–?—å?ãŒæŒ‡å®šé•·ã‚ˆã‚Šé•·ã??å?
428 if( len >= su_fill ) {
429 return makeString( byteValue,0,su_fill,encode );
430 }
431 else {
432 byte[] space = makeByte( "�,encode );
433 int spaceLen = space.length ;
434 byte[] bytebuf = new byte[ su_fill ];
435 for( int i=0; i<len; i++ ) { bytebuf[i] = byteValue[i]; }
436 int k = 0;
437 for( int j=len; j<su_fill; j++ ) { // ä½™ã£ãŸéƒ¨åˆ??ã€ã‚¹ãƒšã?ス埋ã‚
438 if( k >= spaceLen ) { k = 0; }
439 bytebuf[j] = space[k++];
440 }
441 return makeString( bytebuf,0,su_fill,encode ); // æ–°ãŸã«ã€ã™ã¹ã¦ã®é•·ã•ã?部åˆ?–‡å—å?を作æ?ã™ã‚‹ã€?
442 }
443 }
444
445 /**
446 * å°æ•°ç‚¹ã®ãƒ•ォーãƒ?«åˆã£ãŸæ–°ã—ã„æ–?—å?ã‚’ä½œã‚Šã€æ–‡å—å?ã‚’è¿”ã—ã¾ã™ã?
447 * ç¾åœ¨ã¯ã€å°æ•°ç‚¹ãŒé?ã«ä»˜ã„ãŸã‚Šã€æœ€å¾Œã«ä»˜ãå ´åˆã?対応ã?ã—ã¦ã?¾ã›ã‚“ã€?
448 * フォーãƒ??ã€?2.4 ã§ã€?000000000010.1000 ã¨ã?†å½¢ã§ã€ãƒ”リオドをå«ã¿ã¾ã™ã?
449 *
450 * // åŠè§?整数部 10 æ¡?å°æ•°éƒ¨ ?•æ¡ã§å›ºå®šé•·ã®æ–?—ã‚’å¾—ã‚‹ã€?
451 * String str = StringUtil.realFill( "123.45" ,10.5 ) ;
452 *
453 * å®Ÿè¡Œçµæžœ??000000123.45000
454 *
455 * @param str æ•´æ•°ã® String
456 * @param su_fill フォーãƒ?‚’表ã™å®Ÿæ•° ( 12.4 ã§ã€æ•´æ•°éƒ¨ ?‘ï¼’æ¡ã?å°æ•°éƒ¨ ?”æ¡?計17æ¡?)
457 *
458 * @return value å°æ•°ç‚¹ã®ãƒ•ォーãƒ?–‡å—å?
459 */
460 public static String realFill( final String str,final double su_fill ) {
461 if( su_fill < 0 ) {
462 String errMsg = "æŒ?®šæ–‡å—æ•°ãŒè²?§ã™ã?[" + su_fill + "]";
463 throw new RuntimeException( errMsg );
464 }
465
466 int su_seisu = (int)(su_fill); // æŒ?®šã?フォーãƒ??整数部をå–りå?ã™ã?
467 int su_shosu = (int)(su_fill*10 - su_seisu*10); // å°æ•°éƒ¨ã‚’å–りå?ã—ã™ã€?
468 char[] charbuf = new char[ su_seisu + su_shosu + 1 ]; // ç§»ã?char é…å?
469 Arrays.fill( charbuf,'0' );
470
471 if( str == null ) {
472 charbuf[su_seisu] = '.' ;
473 return new String( charbuf );
474 }
475
476 char[] charValue = str.toCharArray();
477 int len = charValue.length;
478
479 // 検査ã™ã‚‹æ–?—å?ã®åŠ?·¥(検査æ–?—å?ã¯ã€ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã®å€¤ã¨ãƒã‚¤ãƒˆæ•°ã§æ–?—数を求ã‚ã‚‹ã?)
480 // å°æ•°ç‚¹ã®ä½ç½®ã‚’求ã‚ã‚‹ã? 本当ã?ã€String クラス㮠indexOf ã§æ±‚ã‚ãšã?byte[] ã§æ¤œç´¢ã™ã¹ãã§ã‚ã‚‹ã€?
481 int valueindex = str.indexOf( '.' );
482 if( valueindex < 0 ) { // valueform 自体ãŒã€åˆã£ã¦ã?ªã??
483 String errMsg = "å…??æ–?—å?ã«å°æ•°ç‚¹ãŒã?å«ã¾ã‚Œã¾ã›ã‚“ã€?;
484 throw new RuntimeException( errMsg );
485 }
486 int su_valueseisu = valueindex; // æ•´æ•°éƒ¨ã®æ–?—æ•°ã¯ã€å°æ•°ç‚¹ã®ä½ç½®ã¨åŒã˜
487 int su_valueshosu = len - valueindex - 1 ; // å°æ•°éƒ¨ã®æ–?—æ•°ã¯ã€å?æ–?—æ•°?æ•´æ•°æ–?—æ•°?ï¼?
488
489 // フォーãƒ??æ•´æ•°æ–?—æ•° ー åŠ?·¥æ–?—ã?æ•´æ•°æ–?—部 ??転é€å?é…å?ä½ç½®
490 int to_index = su_seisu - su_valueseisu;
491 if( to_index < 0 ) {
492 String errMsg = "å…??æ•°å—ãŒã€ãƒ•ォーãƒ?‚ˆã‚Šé•·ã?§ã™ã?(æ•°å—ãŒå£Šã‚Œã¾ã™ã?) form[" + su_fill + "]";
493 throw new RuntimeException( errMsg );
494 }
495 int end_index;
496 // 転é€å?é…å?終äº?½ç½®ã¯ã€ãŠäº’ã„ã®å°æ•°éƒ¨ã®æ–?—æ•°ã«ã‚ˆã‚Šã€çŸã?–¹ã‚’é¸ã¶ã€?
497 if( su_shosu < su_valueshosu ) { end_index = su_seisu + su_shosu + 1; }
498 else { end_index = su_seisu + su_valueshosu + 1; }
499
500 int from_index = 0;
501 while( to_index < end_index ) {
502 charbuf[to_index++] = charValue[from_index++]; // 転é€?ç§»ã—æ›¿ã?
503 }
504 return new String( charbuf ); // コピã?ã—ãŸé…å?å…¨ã¦ã‚’æ–‡å—å?ã«å¤‰æ›
505 }
506
507 /**
508 * ストリングã®éƒ¨åˆ?–‡å—å?ã‚?åˆ¥ã®æ–?—å?ã«ç½®æ›ãˆãŸã‚¹ãƒˆãƒªãƒ³ã‚°ã‚’è¿”ã—ã¾ã™ã?
509 * 例ãˆã°,リターンコードを< br />ã«ç½®æ›ãˆã¦,ç”»é¢ä¸Šã«æ”¹è¡Œè¡¨ç¤ºã•ã›ã‚‹ãŒå¯èƒ½ã§ã™ã?
510 *
511 * @og.rev 5.0.0.1 (2009/08/15) ä¸è¦ãªã‚ªãƒ–ジェクトã?生æ?を抑制ã™ã‚‹ã€?
512 *
513 * @param target å…??æ–?—å?
514 * @param from ç½®æ›å?部åˆ?–‡å—å?
515 * @param to ç½®æ›å?部åˆ?–‡å—å?
516 *
517 * @return ç½®æ›ãˆãŸæ–‡å—å?
518 */
519 public static String replace( final String target,final String from,final String to ) {
520 // if( target == null || from == null || to == null ) { return target; }
521 if( target == null || from == null || to == null || target.indexOf( from ) < 0 ) { return target; }
522
523 // StringBuilder strBuf = new StringBuilder( BUFFER_MIDDLE );
524 StringBuilder strBuf = new StringBuilder( target.length() );
525
526 int start = 0;
527 int end = target.indexOf( from,start );
528 while( end >= 0 ) {
529 strBuf.append( target.substring( start,end ) );
530 strBuf.append( to );
531 start = end + from.length();
532 end = target.indexOf( from,start );
533 }
534
535 if( start > 0 ) {
536 strBuf.append( target.substring( start ) );
537 return strBuf.toString();
538 }
539 else {
540 return target; // 3.4.0.2 (2003/09/05)
541 }
542 }
543
544 /**
545 * Stringåž‹ã?é…å?ã‹ã‚‰ã€ã‚«ãƒ³ãƒ?,)ã§é€£çµã•れãŸString を作æ?ã—ã¾ã™ã?
546 * ã“れã¯?Œé?列を表示用ã«å¤‰æ›ã™ã‚‹ç‚ºã®ã‚‚ã?ã§ã™ã?
547 * array2line( array, ",", 0 ); ã¨åŒç‰ã§ã™ã?
548 *
549 * @param array å…??æ–?—å?é…å?
550 *
551 * @return ä¸??ã«å¤‰æ›ã—ãŸæ–?—å?(引数ãŒnullã®å ´åˆã?ã€?•·ã•ï¼ã?æ–?—å?ã‚’è¿”ã™)
552 */
553 public static String array2csv( final String[] array ) {
554 return array2line( array, ",", 0 );
555 }
556
557 /**
558 * Stringåž‹ã?é…å?ã‹ã‚‰ã€ã‚»ãƒ‘レーターã§é€£çµã•れãŸString を作æ?ã—ã¾ã™ã?
559 * ã“れã¯?Œé?列を表示用ã«å¤‰æ›ã™ã‚‹ç‚ºã®ã‚‚ã?ã§ã™ã?
560 *
561 * @param array å…??æ–?—å?é…å?
562 * @param separator 区åˆ?‚Šè¨˜å·
563 *
564 * @return ä¸??ã«å¤‰æ›ã—ãŸæ–?—å?(引数ãŒnullã®å ´åˆã?ã€?•·ã•ï¼ã?æ–?—å?ã‚’è¿”ã™)
565 */
566 public static String array2line( final String[] array,final String separator ) {
567 return array2line( array, separator,0 );
568 }
569
570 /**
571 * Stringåž‹ã?é…å?ã‹ã‚‰ã€ã‚»ãƒ‘レーターã§é€£çµã•れãŸString を作æ?ã—ã¾ã™ã?
572 * ã“れã¯?Œé?列を表示用ã«å¤‰æ›ã™ã‚‹ç‚ºã®ã‚‚ã?ã§ã™ã?
573 *
574 * @param array å…??æ–?—å?é…å?
575 * @param separator 区åˆ?‚Šè¨˜å·
576 * @param start é…å?ã®é€£çµé–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹
577 *
578 * @return ä¸??ã«å¤‰æ›ã—ãŸæ–?—å?(引数ãŒnullã®å ´åˆã?ã€?•·ã•ï¼ã?æ–?—å?ã‚’è¿”ã™)
579 */
580 public static String array2line( final String[] array,final String separator,final int start ) {
581 if( array == null || array.length <= start ) { return ""; }
582
583 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
584
585 rtn.append( valueOf( array[start] ) );
586 for(int i=start+1; i < array.length; i++) {
587 rtn.append( separator );
588 rtn.append( valueOf( array[i] ) );
589 }
590 return rtn.toString();
591 }
592
593 /**
594 * Enumerationã‹ã‚‰ã€ã‚ªãƒ–ジェクトé?列データを返ã—ã¾ã™ã?
595 * ã“れã¯?ŒEnumerationを表示用ã«å¤‰æ›ã™ã‚‹ç‚ºã®ã‚‚ã?ã§ã™ã?
596 *
597 * @param enume å…??Enumeration
598 *
599 * @return オブジェクトé?åˆ?
600 */
601 public static Object[] enume2Array( final Enumeration<?> enume ) { // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
602 if( enume == null || ! enume.hasMoreElements() ) { return new Object[0]; }
603
604 ArrayList<Object> obj = new ArrayList<Object>();
605
606 while( enume.hasMoreElements() ) {
607 obj.add( enume.nextElement() );
608 }
609 return obj.toArray();
610 }
611
612 /**
613 * Enumerationã‹ã‚‰ã€ã‚ªãƒ–ジェクトé?列データを返ã—ã¾ã™ã?
614 * ã“れã¯?ŒEnumerationを表示用ã«å¤‰æ›ã™ã‚‹ç‚ºã®ã‚‚ã?ã§ã™ã?
615 *
616 * @param enume å…??Enumeration
617 * @param objs - é…å?ãŒååˆ?ªå¤§ãã•ã‚’æŒã¤å ´åˆã?ã€Vector ã®è¦ç´?Œæ ¼ç´ã•れるé…å?ã€?
618 * ãã†ã§ãªã??åˆã?ã€è¦ç´?‚’æ ¼ç´ã™ã‚‹ãŸã‚ã«åŒã˜å®Ÿè¡Œæ™‚ã®åž‹ã?æ–°ã—ã„é…å?ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚?
619 * @return オブジェクトé?åˆ?
620 */
621 public static Object[] enume2Array( final Enumeration<?> enume,final Object[] objs ) { // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
622 if( enume == null || ! enume.hasMoreElements() ) { return objs ; }
623
624 ArrayList<Object> list = new ArrayList<Object>();
625
626 while( enume.hasMoreElements() ) {
627 list.add( enume.nextElement() );
628 }
629 return list.toArray( objs );
630 }
631
632 /**
633 * Iteratorã‹ã‚‰ã€ã‚»ãƒ‘レーターã§é€£çµã•れãŸString を作æ?ã—ã¾ã™ã?
634 * ã“れã¯?ŒEnumerationを表示用ã«å¤‰æ›ã™ã‚‹ç‚ºã®ã‚‚ã?ã§ã™ã?
635 *
636 * @param ite å…??Iterator
637 * @param separator 区åˆ?‚Šè¨˜å·
638 *
639 * @return ä¸??ã«å¤‰æ›ã—ãŸæ–?—å?
640 */
641 public static String iterator2line( final Iterator<?> ite,final String separator ) {
642 if( ite == null || ! ite.hasNext() ) { return ""; }
643
644 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
645
646 rtn.append( valueOf( ite.next() ) );
647 while( ite.hasNext() ) {
648 rtn.append( separator );
649 rtn.append( valueOf( ite.next() ) );
650 }
651 return rtn.toString();
652 }
653
654 /**
655 * カンãƒ?,)ã§é€£çµã•れ㟠String ã‚’ã?é…å?ã«åˆ?§£ã—ã¦ã€ãã®å€¤ã‚’è¿”ã—ã¾ã™ã?
656 * ã“れã¯?ŒãŸã¨ãˆã?ã€AAA,BBB,CCC ãªã©ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ??ã‚¿ã‚’å—ã‘ã¦ã‹ã‚‰é…å?ã«å…¥ã‚Œç›´ã—ã¦ã€?
657 * メニューãªã‚Šãƒªã‚¹ãƒˆã‚’作æ?ã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã?
658 * è¦ç´?Œç©ºã®å ´åˆã?ã€å¿?šã‚«ãƒ³ãƒžã?é–“ã«ã‚¹ãƒšã?スをå?れã¦è¨˜è¿°ã—ã¦ãã ã•ã„ã€?
659 * åˆ?‰²å¾Œã?æ–?—å?ã®å‰å¾Œã?スペã?スã¯ã€å‰Šé™¤ã•れã¾ã™ã?
660 *
661 * @param csvData �?�?タ
662 *
663 * @return æ–?—å?é…å?(引数ãŒnullã€ã‚¼ãƒæ–?—å?ã®å ´åˆã?ã€ã‚µã‚¤ã‚º0ã®é…å?ã‚’è¿”ã™)
664 */
665 public static String[] csv2Array( final String csvData ) {
666 return csv2Array( csvData, ',', 0 );
667 }
668
669 /**
670 * 区åˆ?‚Šæ–?—ã§é€£çµã•れ㟠String ã‚’ã?é…å?ã«åˆ?§£ã—ã¦ã€ãã®å€¤ã‚’è¿”ã—ã¾ã™ã?
671 * ã“れã¯?ŒãŸã¨ãˆã?ã€AAA,BBB,CCC ãªã©ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ??ã‚¿ã‚’å—ã‘ã¦ã‹ã‚‰é…å?ã«å…¥ã‚Œç›´ã—ã¦ã€?
672 * メニューãªã‚Šãƒªã‚¹ãƒˆã‚’作æ?ã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã?
673 * 連続ã—ãŸåŒºåˆ?‚Šæ–?—ã?ã€?¼‘æ–‡å—ã«åˆ?‰²ã—ã¾ã™ã?
674 * åˆ?‰²å¾Œã?æ–?—å?ã®å‰å¾Œã?スペã?スã¯ã€å‰Šé™¤ã•れã¾ã™ã?
675 *
676 * @param csvData �?�?タ
677 * @param separator 区åˆ?‚Šæ–??
678 *
679 * @return æ–?—å?é…å?(引数ãŒnullã€ã‚¼ãƒæ–?—å?ã®å ´åˆã?ã€ã‚µã‚¤ã‚º0ã®é…å?ã‚’è¿”ã™)
680 */
681 public static String[] csv2Array( final String csvData,final char separator ) {
682 return csv2Array( csvData,separator,0 );
683 }
684
685 /**
686 * 区åˆ?‚Šæ–?—ã§é€£çµã•れ㟠String ã‚’ã?é…å?ã«åˆ?§£ã—ã¦ã€ãã®å€¤ã‚’è¿”ã—ã¾ã™ã?
687 * ã“れã¯?ŒãŸã¨ãˆã?ã€AAA,BBB,CCC ãªã©ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ??ã‚¿ã‚’å—ã‘ã¦ã‹ã‚‰é…å?ã«å…¥ã‚Œç›´ã—ã¦ã€?
688 * メニューãªã‚Šãƒªã‚¹ãƒˆã‚’作æ?ã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã?
689 * 連続ã—ãŸåŒºåˆ?‚Šæ–?—ã?ã€?¼‘æ–‡å—ã«åˆ?‰²ã—ã¾ã™ã?
690 * åˆ?‰²å¾Œã?æ–?—å?ã®å‰å¾Œã?スペã?スã¯ã€å‰Šé™¤ã•れã¾ã™ã?
691 * 第?“ã?引数ã¯ã€ãƒªã‚¿ãƒ¼ãƒ³ã™ã‚‹é…å?ã®å€‹æ•°ã‚’指定ã—ã¾ã™ã?ãŸã ã—ã?第ä¸?¼•æ•°ãŒNULLã‚??ã‚¼ãƒæ–?—å?
692 * ãªã©ã®ä¸æ£ãªæƒ??ã®å ´åˆã?ã€??常ã¨åŒã˜ã?é•·ã•ゼãƒã®é…å?ã‚’è¿”ã—ã¾ã™ã?
693 * len=0 を指定ã™ã‚‹ã¨åˆ?§£ã—ãŸãƒ??ã‚¿ã®å€‹æ•°åˆ??é…å?を作æ?ã—ã¾ã™ã?æŒ?®šã?é•·ã•ãŒçŸã??åˆã?ã€?
694 * ãã“ã¾ã§åˆ??ã¿å–り込ã¿ã¾ã™ã?æŒ?®šã?é•·ã•ãŒé•·ã??åˆã?ã€ä½™å?ã«é…å?を作æ?ã—ã¾ã™ã?
695 * ã‚»ãƒ?ƒˆã•れるå?ã¯ã€?" ã§ã™ã?
696 *
697 * @og.rev 3.8.5.1 (2006/05/08) è¨å®šé?列ã?数を指定ã§ãるよã†ã«å¤‰æ›´
698 * @og.rev 3.8.8.2 (2007/01/26) åˆ?‰²å¾Œã?値ã®å‰å¾Œã?スペã?スã¯å‰Šé™¤ã—ã¾ã™ã?
699 *
700 * @param csvData �?�?タ
701 * @param separator 区åˆ?‚Šæ–??
702 * @param len æŒ?®šã?é•·ã•ã?é…å?ã§è¿”ã—ã¾ã™ã?
703 *
704 * @return æ–?—å?é…å?(引数ãŒnullã€ã‚¼ãƒæ–?—å?ã®å ´åˆã?ã€ã‚µã‚¤ã‚º0ã®é…å?ã‚’è¿”ã™)
705 */
706 public static String[] csv2Array( final String csvData,final char separator, final int len ) {
707 if( csvData == null || csvData.length() == 0 ) { return new String[0] ; }
708
709 CSVTokenizer token = new CSVTokenizer( csvData,separator );
710
711 int count = (len > 0 ) ? len : token.countTokens() ;
712 String[] rtn = new String[ count ];
713 int i = 0;
714 for( ; i<count && token.hasMoreTokens() ; i++ ) {
715 rtn[i] = (token.nextToken()).trim(); // 3.8.8.2 (2007/01/26)
716 }
717 for( ; i<count; i++ ) {
718 rtn[i] = "" ;
719 }
720
721 return rtn;
722 }
723
724 /**
725 * 区åˆ?‚Šæ–?—ã§é€£çµã•れ㟠String ã‚’ã?é…å?ã«åˆ?§£ã—ã¦ã€ãã®å€¤ã‚’è¿”ã—ã¾ã™ã?
726 * ã“れã¯?ŒãŸã¨ãˆã?ã€AAA,BBB,CCC ãªã©ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ??ã‚¿ã‚’å—ã‘ã¦ã‹ã‚‰é…å?ã«å…¥ã‚Œç›´ã—ã¦ã€?
727 * メニューãªã‚Šãƒªã‚¹ãƒˆã‚’作æ?ã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã?
728 * csv2Array ã¨ç•°ãªã‚Šã?連続ã—ãŸåŒºåˆ?‚Šæ–?—ã?ã€å?割ã›ãšã«ãƒˆã?クンã®ã¿åˆ?‚Šå‡ºã—ã¾ã™ã?
729 * トã?クンã¯ã€ã‚«ãƒ³ãƒ?,)ã®ã¿ã§åŒºåˆ?‚Šã€ãã®å¾?trim() ã«ã‚ˆã‚Š
730 * å‰å¾Œã?スペã?スを削除ã—ã¾ã™ã?
731 *
732 * @param csvData �?�?タ
733 *
734 * @return æ–?—å?é…å?
735 */
736 public static String[] csv2ArrayOnly( final String csvData ) {
737 if( csvData == null || csvData.length() == 0 ) { return new String[0] ; }
738
739 StringTokenizer token = new StringTokenizer( csvData,"," );
740
741 ArrayList<String> list = new ArrayList<String>();
742 while( token.hasMoreTokens() ) {
743 String temp = (token.nextToken()).trim();
744 if( temp.length() > 0 ) { list.add( temp ); }
745 }
746
747 return list.toArray( new String[list.size()] );
748 }
749
750 /**
751 * カンãƒ?,)ã€ãƒã‚¤ãƒ•ン(-)ã§é€£çµã•れ㟠String ã‚’ã?é…å?ã«åˆ?§£ã—ã¦ã€ãã®å€¤ã‚’è¿”ã™å‡¦ç??スペシャル版ã§ã™ã?
752 * 0,1,3,5-8,10-* ãªã©ã®æ•°å—æ–‡å—å?ã‹ã‚‰ã€å¿?¦ãªæ•°å—をピックアãƒ??ã—ãŸæ–?—é?列を返ã—ã¾ã™ã?
753 * 引数㮠maxNo ã¯ã€?*" ãŒæŒ‡å®šã•れãŸå ´åˆã?ã€æœ€å¤§ã®æ•°å€¤ã§ã™ã?
754 * よã£ã¦ã€?*" ã¯ã€å˜ç‹¬(?‘æ–‡å?ã§ã¯ã€?-maxNo を表ã—ã?N-* ã§ã¯ã€N-maxNo ã‚’æ„味ã—ã¾ã™ã?
755 * カンマ区åˆ?‚Šã§æŒ?®šã•れる値ã¯ã€åŸºæœ¬çš?«æ•°å—ã§ã€?‡è¤?1,1,2,2)ã€??転(3,2,1)ã§æŒ?®šã§ãã¾ã™ã?
756 * 5-3 ã¨æŒ?®šã—ãŸå?åˆã?ã€?,4,3 ã«åˆ?§£ã•れã¾ã™ã?é€??ã«ç™»éŒ²ã•れã¾ã™ã?
757 * ã¾ãŸã?ä¸?–‡å—ã ã‘ã?å ´åˆã?ã€ã‚¢ãƒ«ãƒ•ァベッãƒ?a-z,A-Zãªã©)も指定ã™ã‚‹äº‹ãŒå¯èƒ½ã§ã™ã?
758 * アルファベットã?å ´åˆã?ã€?*" ã¯æŒ?®šã§ãã¾ã›ã‚“ã€?
759 * é‡è¤?‰Šé™¤ã€æ?é ?¸¦ã¹æ›¿ãˆç‰ãŒã€å¿?¦ãªå ´åˆã?ã€å–得後ã?é…å?ã‚’æ“作ã—ã¦ãã ã•ã„ã€?
760 *
761 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦è¿½åŠ?
762 *
763 * @param csvData 0,1,3,5-8,10-* ãªã©ã®CSV-ãƒã‚¤ãƒ•ンæ–?—å?
764 * @param maxNo "*" ãŒæŒ‡å®šã•れãŸå ´åˆã?ã€æœ€å¤§æ•°
765 * @return æ–?—å?é…å?(引数ãŒnullã€ã‚¼ãƒæ–?—å?ã®å ´åˆã?ã€ã‚µã‚¤ã‚º0ã®é…å?ã‚’è¿”ã™)
766 */
767 public static String[] csv2ArrayExt( final String csvData , final int maxNo ) {
768 if( csvData == null || csvData.length() == 0 ) { return new String[0] ; }
769
770 String strData = csvData.replace( "-*" , "-" + maxNo ); // ã¾ãšã?N-* å½¢å¼ã‚’ã€N-maxNo ã«å¤‰æ›ã—ã¾ã™ã?
771 strData = strData.replace( "*" , "0-" + maxNo ); // ãã?後ã?"*" å˜ç‹¬(?‘æ–‡å?ã‚’ã?0-maxNo ã«å¤‰æ›ã—ã¾ã™ã?
772
773 ArrayList<String> noList = new ArrayList<String>();
774
775 String[] nos = strData.split( "," ); // カンマã§åˆ?§£ã€? , N-M , N-* ã®ã©ã‚Œã‹
776 int lastNo = 0; // ç¾åœ¨ã®ç•ªå·
777 for( int i=0; i<nos.length; i++ ) {
778 String sno = nos[i] ;
779 int hai = sno.indexOf( '-' );
780 // ãƒã‚¤ãƒ•ンãŒå«ã¾ã‚Œã¦ã?‚‹ã¨ãã?å‰å¾Œã«åˆ?§£ã—ã¦ã€?–“を埋ã‚ã‚‹
781 if( hai > 0 ) {
782 String st1 = sno.substring( 0,hai ); // å…ˆé?ã‹ã‚‰ãƒã‚¤ãƒ•ンã¾ã§
783 String st2 = sno.substring( hai+1 ); // ãƒã‚¤ãƒ•ンã‹ã‚‰æœ?¾Œã¾ã§
784 if( st1.length() == 1 && st2.length() == 1 ) { // ã¨ã‚‚ã«?‘æ–‡å—ã?å ´åˆã?ã€char化ã—ã¦å‡¦ç??(英数å—å?ç?
785 char ch1 = st1.charAt(0);
786 char ch2 = st2.charAt(0);
787 if( ch1 < ch2 ) { while( ch1 <= ch2 ) { noList.add( String.valueOf(ch1++) ); } }
788 else { while( ch1 >= ch2 ) { noList.add( String.valueOf(ch1--) ); } }
789 }
790 else {
791 int ch1 = Integer.parseInt( st1 );
792 int ch2 = Integer.parseInt( st2 );
793 if( ch1 < ch2 ) { while( ch1 <= ch2 ) { noList.add( String.valueOf(ch1++) ); } }
794 else { while( ch1 >= ch2 ) { noList.add( String.valueOf(ch1--) ); } }
795 }
796 }
797 else {
798 noList.add( String.valueOf(sno) );
799 }
800 }
801 return noList.toArray( new String[noList.size()] ) ;
802 }
803
804 /**
805 * Object å¼•æ•°ã®æ–?—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
806 * ã“れã¯?ŒString.valueOf ã¨ã»ã¼åŒã˜å‹•作をã—ã¾ã™ãŒã€å¼•æ•°ã?null ã®å ´åˆã«ã€?
807 * "null" ã¨ã?†æ–?—å?ã‚’è¿”ã™ã®ã§ã¯ãªãã?ãªã«ã‚‚ãªã?–‡å—å? "" ã‚’è¿”ã—ã¾ã™ã?
808 *
809 * @param obj æ–?—å?表ç¾ã™ã¹ãå?ã®ã‚ªãƒ–ジェクãƒ?
810 *
811 * @return 引数ã?null ã®å ´åˆã?ã€?" ã«ç‰ã—ã?–‡å—å?。ãã?§ãªã??åˆã?ã€obj.toString() ã®å€¤
812 */
813 public static String valueOf( final Object obj ) {
814 if( obj == null ) { return ""; }
815 else { return obj.toString(); }
816 }
817
818 /**
819 * HTML上ã?エスケープ文å—を変æ›ã—ã¾ã™ã?
820 *
821 * HTMLã§è¡¨ç¤ºã™ã‚‹å ´åˆã«ãã¡ã‚“ã¨ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—æ–‡å—ã«å¤‰æ›ã—ã¦ãŠã‹ãªã?¨
822 * Script を実行ã•れãŸã‚Šã?ä¸è¦ãªHTMLコマンドを潜り込ã¾ã•れãŸã‚Šã™ã‚‹ãŸã‚ã€?
823 * ã‚»ã‚ュリãƒ?‚£ãƒ¼ãƒ›ã?ルã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã?ã§ã€æ³¨æ„ã—ã¦ãã ã•ã„ã€?
824 *
825 * @param input HTMLエスケープå‰ã®æ–?—å?
826 *
827 * @return エスケープ文å—ã«å¤‰æ›å¾Œã?æ–?—å?
828 */
829 public static String htmlFilter( final String input ) {
830 if( input == null || input.length() == 0 ) { return ""; }
831 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
832 char ch;
833 for(int i=0; i<input.length(); i++) {
834 ch = input.charAt(i);
835 switch( ch ) {
836 case '<' : rtn.append("<"); break;
837 case '>' : rtn.append(">"); break;
838 case '"' : rtn.append("""); break;
839 case '\'' : rtn.append("'"); break;
840 case '&' : rtn.append("&"); break;
841 default : rtn.append(ch);
842 }
843 }
844 return( rtn.toString() );
845 }
846
847 /**
848 * JavaScript ç‰ã?引数ã§ã®ã‚¯ã‚ªãƒ¼ãƒˆæ–‡å—ã‚’ASCII変æ›ã—ã¾ã™ã?
849 *
850 * JavaScript ã®å¼•æ•°ã®å€¤ã«ã€ãƒ€ãƒ–ルクオーãƒ?")ã€ã‚·ãƒ³ã‚°ãƒ«ã‚¯ã‚ªãƒ¼ãƒ?')ã?
851 * å«ã¾ã‚Œã‚‹ã¨ã€æ–‡å—å?を表ã™ç‚ºã«å‰å¾Œã«æŒ?®šã—ã¦ã?‚‹ã‚¯ã‚ªãƒ¼ãƒˆã¨æ··ä¹±ã—ã?
852 * ãƒ??タを表ç¾ã§ããªã?‚±ãƒ¼ã‚¹ãŒã‚りã¾ã™ã?ãã?å ´åˆã«ã¯ã€ã‚¯ã‚ªãƒ¼ãƒˆæ–‡å—ã‚’
853 * ASCIIæ–?—ã«ç½®ãæ›ãˆã‚‹äº‹ã§ã€æŒ‡å®šã?æ–?—を渡ã™ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã?
854 * ã“ã“ã§ã¯ã€å¼•æ•°æ–?—å?ã«ã€ãƒ€ãƒ–ルクオーãƒ?")ã€ã‚·ãƒ³ã‚°ãƒ«ã‚¯ã‚ªãƒ¼ãƒ?')ãŒã?
855 * å«ã¾ã‚Œã‚‹ã¨ã€ãれãžã‚Œã?ASCII コーãƒ??¥?˜ï¼’ï¼’ã??¥?˜ï¼’ï¼?ã«ç½®ãæ›ãˆã¾ã™ã?
856 * ãªãŠã?null ã¯ã€ã‚¼ãƒæ–?—å?ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã?
857 *
858 * @param input 入力文å—å?
859 *
860 * @return クオート文å—ã‚’ASCIIæ–?—ã«ç½®ãæ›ãˆãŸæ–?—å?
861 */
862 public static String quoteFilter( final String input ) {
863 if( input == null || input.length() == 0 ) { return ""; }
864 if( input.indexOf( '\'' ) < 0 && input.indexOf( '"' ) < 0 ) { return input; }
865
866 StringBuilder rtn = new StringBuilder();
867 char ch;
868 for(int i=0; i<input.length(); i++) {
869 ch = input.charAt(i);
870 switch( ch ) {
871 case '"' : rtn.append( "\\x22" ); break;
872 case '\'' : rtn.append( "\\x27" ); break;
873 default : rtn.append( ch );
874 }
875 }
876 return( rtn.toString() );
877 }
878
879 /**
880 * æ•°å—ã‹ã‚‰ï¼‘ï¼–é?æ–?—ã«å¤‰æ›ã™ã‚‹ãƒ??ブルã§ã™ã?
881 * MD5 ã®ãƒãƒƒã‚·ãƒ¥çµæžœ(Byte)ã‚’æ–‡å—å?ã«ã™ã‚‹ã¨ãã«ä½¿ç”¨ã—ã¾ã™ã?
882 *
883 * @og.rev 5.2.2.0 (2010/11/01) security.HybsCryptography ã¸ç§»å‹?
884 */
885 // private static final char[] hexadecimal =
886 // { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
887 // 'a', 'b', 'c', 'd', 'e', 'f' };
888
889 /**
890 * MessageDigestã«ã‚ˆã‚Šã€MD5 ã§ãƒãƒƒã‚·ãƒ¥ã—ãŸæ–?—ã«å¤‰æ›ã—ã¾ã™ã?
891 *
892 * MD5ã§ã€?¼‘ï¼–Byteã®ãƒã‚¤ãƒˆã«å¤‰æ›ã•れã¾ã™ãŒã€ã“ã“ã§ã¯ã€?del>マイナス時ã«ã¯,
893 * 符å·ã‚’å転ã•ã›ã¦ã€?/del>?‘ï¼–é?æ•°ã§æ–?—å?ã«å¤‰æ›ã—ã¦ã?¾ã™ã?
894 * <del>よã£ã¦ã€ã“ã®ãƒ¡ã‚½ãƒ?ƒ‰ã§å¤‰æ›ã—ãŸæ–?—ã§ã®ã¿çªãåˆã‚ã›ã¦æ£ã—ã„ã‹ã©ã?‹ã‚?
895 * 判æ–ã—ã¦ãã ã•ã„ã€?/del>
896 *
897 * å¤‰æ›æ–¹æ³•ã?ã€å„ãƒã‚¤ãƒˆã?上ä½?下ä½ã‚’?‘ï¼–é?æ–?—å?ã«å¤‰æ›å¾Œã?連çµã—ã¦ã?¾ã™ã?
898 * ã“れã¯ã€Tomcatç‰ã? digest èªè¨¼(MD5使用æ™?ã¨åŒã˜å¤‰æ›æ–¹å¼ã§ã™ã?
899 * 連çµå¾Œã?æ–?—å?é•·ã¯ã€?¼“ï¼’ãƒã‚¤ãƒ?固å®?ã«ãªã‚Šã¾ã™ã?
900 *
901 * @og.rev 5.2.2.0 (2010/11/01) security.HybsCryptography ã¸ç§»å‹?
902 *
903 * @param input 変æ›å‰ã?æ–?—å?
904 *
905 * @return MD5 ã§ãƒãƒƒã‚·ãƒ¥ã—ãŸæ–?—å?。32ãƒã‚¤ãƒ?固å®?
906 */
907 // public static String getMD5( final String input ) {
908 // String rtn = null;
909 // if( input != null ) {
910 // try {
911 // MessageDigest md5 = MessageDigest.getInstance( "MD5" );
912 // md5.update( input.getBytes() );
913 // byte[] out = md5.digest();
914 //
915 // char[] chs = new char[32];
916 // for( int i=0; i<16; i++ ) {
917 // int high = ((out[i] & 0xf0) >> 4);
918 // int low = (out[i] & 0x0f);
919 // chs[i*2] = hexadecimal[high];
920 // chs[i*2+1] = hexadecimal[low];
921 // }
922 // rtn = new String(chs);
923 // }
924 // catch( NoSuchAlgorithmException ex ) {
925 // String errMsg = "MessageDigestã§å¤±æ•—ã—ã¾ã—ãŸã€?" + input + "]" + CR
926 // + ex.getMessage() ;
927 // throw new RuntimeException( errMsg,ex );
928 // }
929 // }
930 // return rtn;
931 // }
932
933 /**
934 * æ‰?®šã?ã‚ャラクタコードをå–り除ã?Ÿæ–?—å?を作æ?ã—ã¾ã™ã?
935 *
936 * 実ç¾ã—ãŸã?©Ÿè?ã¯ã€String#replace( 'x','' ) çš?ªè¡¨ç¾ã§ã™ã?
937 * ã¤ã¾ã‚Šã?æŒ?®šã?ã‚ャラクタをå–り除ããŸã??ã§ã™ãŒã€ä¸Šè¨˜ã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã€?
938 * コンパイル時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã?
939 * å–り除ããŸã?‚ャラクタコードãŒå˜åœ¨ã—ãªã??åˆã?ã€æŒ‡å®šã?æ–?—å?ã‚?
940 * ãã?ã¾ã¾è¿”ã—ã¾ã™ã?
941 *
942 * @param value 処ç?¯¾è±¡ã®æ–?—å?
943 * @param ch å–り除ããŸã?‚ャラクタ
944 *
945 * @return 処ç?¾Œã?æ–?—å?
946 */
947 public static String deleteChar( final String value,final char ch ) {
948 if( value == null || value.indexOf( ch ) < 0 ) { return value; }
949 char[] chs = value.toCharArray() ;
950 int j=0;
951 for( int i=0;i<chs.length; i++ ) {
952 if( chs[i] == ch ) { continue; }
953 chs[j] = chs[i];
954 j++;
955 }
956 return String.valueOf( chs,0,j );
957 }
958
959 /**
960 * æ–?—å?ã«å«ã¾ã‚Œã‚‹ã€ç‰¹å®šã?æ–?—ã?個数をカウントã—ã¦è¿”ã—ã¾ã™ã?
961 *
962 * @og.rev 5.2.0.0 (2010/09/01)
963 *
964 * @param value 処ç?¯¾è±¡ã®æ–?—å?
965 * @param ch カウントã™ã‚‹æ–‡å?
966 *
967 * @return カウント数
968 */
969 public static int countChar( final String value,final char ch ) {
970 if( value == null || value.indexOf( ch ) < 0 ) { return 0; }
971 char[] chs = value.toCharArray() ;
972 int cnt=0;
973 for( int i=0;i<chs.length; i++ ) {
974 if( chs[i] == ch ) { cnt++; }
975 }
976 return cnt;
977 }
978
979 /**
980 * code39 ã®ãƒã‚§ãƒ?‚¯ãƒ?‚¸ãƒ?ƒˆè¨ˆç®—ã«ä½¿ç”¨ã™ã‚‹ モジュラス?”ï¼?ã®å¤‰æ›è¡¨ã§ã™ã?
981 *
982 */
983 private static final String MODULUS_43 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%" ;
984
985 /**
986 * CODE39 ã® æ–?—å?を作æ?ã—ã¾ã™ã?
987 *
988 * CODE39 ã¯ã€ã?0??, A?žZ,-,・,ã€?$,/,+,%ã€ã?コードãŒä½¿ç”¨ã§ãã‚‹
989 * ãƒã?コードã?体系ã§ã™ã?通常 * ã§å§‹ã¾ã‚?* ã§çµ‚äº?—ã¾ã™ã?
990 * ã¾ãŸã?ãƒã‚§ãƒ?‚¯ãƒ?‚¸ãƒ?ƒˆ ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ©ã‚¹43 ãŒä½¿ã‚れã¾ã™ã?
991 * ã“ã“ã§ã¯ã€æŒ‡å®šã?æ–?—å?ã®å‰å¾Œã«ã€? を付与ã—ã€å¿?¦ã§ã‚れã°
992 * ãƒã‚§ãƒ?‚¯ãƒ?‚¸ãƒ?ƒˆã‚‚付与ã—ã¾ã™ã?
993 * æŒ?®šã?入力文å—å?ã«ã¯ã€? を付ã‘ãªã?§ãã ã•ã„ã€?
994 *
995 * @param value 処ç?¯¾è±¡ã®æ–?—å?
996 * @param checkDigit ãƒã‚§ãƒ?‚¯ãƒ?‚¸ãƒ?ƒˆã®ä»˜ä¸?true:付ã‘ã‚?false:付ã‘ãªã?
997 *
998 * @return 処ç?¾Œã?æ–?—å?
999 */
1000 public static String code39( final String value,final boolean checkDigit ) {
1001 String rtn = ( value == null ) ? "" : value ;
1002 if( ! checkDigit ) { return ( "*" + rtn + "*" ); }
1003
1004 int kei = 0;
1005 int cd;
1006 for( int i=0; i<rtn.length(); i++ ) {
1007 cd = MODULUS_43.indexOf( rtn.charAt(i) );
1008 if( cd < 0 ) {
1009 String errMsg = "æŒ?®šã?æ–?—ä¸ã«ã€CODE39 è¦å®šå¤–æ–‡å—ãŒä½¿ç”¨ã•れã¦ã?¾ã™ã?[" + rtn.charAt(i) + "]" ;
1010 throw new RuntimeException( errMsg );
1011 }
1012 kei += cd ;
1013 }
1014 char digit = MODULUS_43.charAt( kei % 43 );
1015
1016 return ( "*" + rtn + digit + "*" );
1017 }
1018
1019 /**
1020 * 引数 in ãŒã?null ã¾ãŸã?ã€ã‚¼ãƒæ–?—å?ã®å ´åˆã??¤ãƒ?ƒ•ォルトå? def ã‚’è¿”ã—ã¾ã™ã?
1021 * ã‚‚ã¡ã‚ã‚“ã€in ã‚?def ã‚?null ã®å ´åˆã??¤null ã‚’è¿”ã—ã¾ã™ã?
1022 *
1023 * @param in 基準ã¨ãªã‚‹æ–‡å—å?
1024 * @param def ãƒ?ƒ•ォルト文å—å?
1025 *
1026 * @return ( in != null ) ? in : def ;
1027 */
1028 public static String nval( final String in,final String def ) {
1029 return ( in == null || in.length() == 0 ) ? def : in ;
1030 }
1031
1032 /**
1033 * 引数 in ãŒã?null ã¾ãŸã?ã€ã‚¼ãƒæ–?—å?ã®å ´åˆã??¤ãƒ?ƒ•ォルトå? def ã‚’è¿”ã—ã¾ã™ã?
1034 *
1035 * @param in 基準ã¨ãªã‚‹æ–‡å—å?
1036 * @param def ãƒ?ƒ•ォルト数å?
1037 *
1038 * @return 引数 in を変æ›ã—ãŸæ•°å—ã?変æ›ã§ããªã??åˆã? ãƒ?ƒ•ォルトå? def
1039 */
1040 public static int nval( final String in,final int def ) {
1041 return ( in == null || in.length() == 0 ) ? def : Integer.parseInt( in ) ;
1042 }
1043
1044 /**
1045 * 引数 in ãŒã?null ã¾ãŸã?ã€ã‚¼ãƒæ–?—å?ã®å ´åˆã??¤ãƒ?ƒ•ォルトå? def ã‚’è¿”ã—ã¾ã™ã?
1046 *
1047 * @param in 基準ã¨ãªã‚‹æ–‡å—å?
1048 * @param def ãƒ?ƒ•ォルト数å?
1049 *
1050 * @return 引数 in を変æ›ã—ãŸæ•°å—ã?変æ›ã§ããªã??åˆã? ãƒ?ƒ•ォルトå? def
1051 */
1052 public static long nval( final String in,final long def ) {
1053 return ( in == null || in.length() == 0 ) ? def : Long.parseLong( in ) ;
1054 }
1055
1056 /**
1057 * 引数 in ãŒã?null ã¾ãŸã?ã€ã‚¼ãƒæ–?—å?ã®å ´åˆã??¤ãƒ?ƒ•ォルトå? def ã‚’è¿”ã—ã¾ã™ã?
1058 * 通常ã¯ã€?true" ã¾ãŸã?ã€?"TRUE" æ–?—å?ã‚’ã?è«–ç†å€¤ã® true ã«å¤‰æ›ã—ã¾ã™ã?
1059 * ãŸã ã—ã?æ–?—å?é•·ã?1æ–?—ã?å ´åˆã?ã¿ã€?0" 以外を true ã«å¤‰æ›ã—ã¾ã™ã?
1060 *
1061 * @param in 基準ã¨ãªã‚‹æ–‡å—å?
1062 * @param def ãƒ?ƒ•ォルト論ç†å€¤
1063 *
1064 * @return 引数 in を変æ›ã—ãŸè«–ç†å€¤ã€‚変æ›ã§ããªã??åˆã? ãƒ?ƒ•ォルトå? def
1065 */
1066 public static boolean nval( final String in,final boolean def ) {
1067 boolean rtn = def;
1068 if( in != null && in.length() != 0 ) {
1069 rtn = "true".equalsIgnoreCase( in ) ;
1070 if( in.length() == 1 ) { rtn = ! "0".equals( in ); }
1071 }
1072 return rtn ;
1073 }
1074
1075 /**
1076 * 引数 in ãŒã?nullã€?_"ã€ã‚¼ãƒæ–?—å?ã®å ´åˆã??¤ãƒ?ƒ•ォルトå? def ã‚’è¿”ã—ã¾ã™ã?
1077 * <del>ãŸã ã—ã?NULL代替æ–??_)ã¯ã‚¼ãƒæ–?—å?ã«ç½®ãæ›ãˆã¾ã™ã?</del>
1078 *
1079 * ã•らã«ã€ãƒ¡ãƒ¢ãƒªé ˜åŸŸã‚’ç¯?´?™ã‚‹ç‚ºã€intern() ã®çµæžœã‚’è¿”ã—ã¾ã™ã?
1080 *
1081 * @og.rev 5.2.2.0 (2010/11/01) "_" ã®å–り扱ã?¤‰æ›´
1082 *
1083 * @param in 基準ã¨ãªã‚‹æ–‡å—å?
1084 * @param def ãƒ?ƒ•ォルト文å—å?
1085 *
1086 * @return nullã€?_"ã€ã‚¼ãƒæ–?—å?ã®å ´åˆã?ã€ãƒ‡ãƒ•ォルト文å—å?ã‚’ã?ãã†ã§ãªã‘れã°ã€å?力文å—ã‚’è¿”ã™ã€?
1087 */
1088 public static String nval2( final String in,final String def ) {
1089 // return ( in == null || in.length() == 0 ) ? def : ( "_".equals( in ) ? "" : in.intern() ) ;
1090 return ( in == null || in.length() == 0 || "_".equals( in ) ) ? def : in.intern() ;
1091 }
1092
1093 /**
1094 * 引数 in ãŒã?null ã¾ãŸã?ã€ã‚¼ãƒæ–?—å?ã®å ´åˆã??¤ãƒ?ƒ•ォルトå? def ã‚’è¿”ã—ã¾ã™ã?
1095 * ãŸã ã—ã?NULL代替æ–??_)㯠ãƒ?ƒ•ォルトå? def2 ã«ç½®ãæ›ãˆã¾ã™ã?
1096 *
1097 * ã•らã«ã€ãƒ¡ãƒ¢ãƒªé ˜åŸŸã‚’ç¯?´?™ã‚‹ç‚ºã€intern() ã®çµæžœã‚’è¿”ã—ã¾ã™ã?
1098 *
1099 * @og.rev 5.2.2.0 (2010/11/01) "_" ã®å–り扱ã?¤‰æ›´
1100 *
1101 * @param in 基準ã¨ãªã‚‹æ–‡å—å?
1102 * @param def ãƒ?ƒ•ォルト文å—å?
1103 * @param def2 NULL代替æ–??_)ã®å ´åˆã?ãƒ?ƒ•ォルト文å—å?
1104 *
1105 * @return NULLæ–?—å?関係ã?å ´åˆã?ã€ã‚¼ãƒæ–?—å?ã‚’ã?ãã†ã§ãªã‘れã°ã€å?力文å—ã‚’è¿”ã™ã€?
1106 */
1107 public static String nval2( final String in,final String def,final String def2 ) {
1108 // return ( in == null || in.length() == 0 ) ? def : ( "_".equals( in ) ? "" : in.intern() ) ;
1109 return ( in == null || in.length() == 0 ) ? def : ( "_".equals( in ) ? def2 : in.intern() ) ;
1110 }
1111
1112 /**
1113 * 引数 in ãŒã?null ã¾ãŸã?ã€ã‚¼ãƒæ–?—å?ã€ã¾ãŸã?ã™ã¹ã¦ç©ºç™½æ–?—ã?å ´åˆã??¤true ã‚’è¿”ã—ã¾ã™ã?
1114 * ãれ以外ã? false ã‚’è¿”ã—ã¾ã™ã?
1115 *
1116 * 注æ„ã?ã€ã‚ªãƒ¼ãƒ«ã‚¹ãƒšã?スã‚?‚¿ãƒ–æ–‡å—ã?改行文å—ã‚‚ true ã«ãªã‚Šã¾ã™ã?
1117 *
1118 * @param in 基準ã¨ãªã‚‹æ–‡å—å?
1119 *
1120 * @return NULLæ–?—å?関係ã?å ´åˆã?ã€true ã‚’ã?ãã†ã§ãªã‘れã°ã€false ã‚’è¿”ã™ã€?
1121 */
1122 public static boolean isNull( final String in ) {
1123 if( in == null || in.length() == 0 ) { return true; }
1124
1125 // String.trim().length()==0 ã®é«˜é?ç‰?
1126 for( int i=0; i<in.length(); i++ ) {
1127 if( !Character.isWhitespace( in.charAt(i) ) ) {
1128 return false;
1129 }
1130 }
1131 return true;
1132 }
1133
1134 /**
1135 * Throwable ã® printStackTrace() çµæžœã‚’æ–‡å—å?ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã?
1136 *
1137 * @param th printStackTraceã™ã¹ãå?ã®Throwableオブジェクãƒ?
1138 *
1139 * @return Throwableã®è©³ç´°ãƒ¡ãƒ?‚»ãƒ¼ã‚¸( th.printStackTrace() )
1140 */
1141 public static String stringStackTrace( final Throwable th ) {
1142 if( th == null ) { return null; }
1143
1144 StringWriter sw = new StringWriter();
1145 th.printStackTrace( new PrintWriter( sw ) );
1146
1147 return String.valueOf( sw );
1148 }
1149
1150 /**
1151 * 大ããªæµ®å‹•å°æ•°ç‚¹æ•°ã«ã¤ã?¦ã€ã‚«ãƒ³ãƒžç·¨é›?‚’行ã„ã¾ã™ã?
1152 *
1153 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€?.23 E12 ãªã©ã®æ•°å—ã?扱ã?¾ã›ã‚“。é?常ã®
1154 * æ•°å—ã¨ãƒ”ãƒªã‚ªãƒ‰ã§æ§‹æ?ã•ã‚ŒãŸæ–‡å—å?ã®ã¿ã€å¤‰æ›å¯¾è±¡ã«ãªã‚Šã¾ã™ã?
1155 * (ãŸã ã—ã?䏿£ãªæ–?—å?を与ãˆã¦ã‚‚エラーãƒã‚§ãƒ?‚¯ã¯ã—ã¦ã?¾ã›ã‚“ã€?
1156 * minFraction ã«ã¯ã€å°‘数点部ã«ä¸Žãˆã‚‹å›ºå®šå?を指定ã—ã¾ã™ã?入力文å—å?ã?
1157 * ãã?æ¡æ•°ã‚ˆã‚Šå°‘ãªã??åˆã?ã€?¼åŸ‹ã‚ã—ã¾ã™ã?<del>多ã„å ´åˆã?ã€ã‚«ãƒ?ƒˆã—ã¾ã™ã?</del>
1158 * 多ã„å ´åˆã§ã‚‚ã‚«ãƒ?ƒˆã—ã¾ã›ã‚“ã€?
1159 * minFraction ã?0 ã®å ´åˆã?ã€å°‘数点ã¯ä»˜ãã¾ã›ã‚“ã€?
1160 * ".12" ãªã©ã®å°‘数点ã¯ã€å¿?šå…ˆé?ã« 0 ãŒä»˜ãã¾ã™ã?
1161 * 入力文å—å?ã?null ã‹ã?ã‚¼ãƒæ–?—å?時ã?ã€ãã®ã¾ã¾å…¥åŠ›ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã—ã¾ã™ã?
1162 *
1163 * <pre>
1164 * DecimalFormat format = new DecimalFormat( "#,##0.00########" );
1165 * double dd = Double.parseDouble( val );
1166 * return format.format( dd );
1167 * </pre>
1168 * ã«å¯¾ã—ã¦ã€minFractionåˆ??少数以下ã?ゼãƒã®æŒ?®šã¨ã€inã« ',' ã?
1169 * å«ã¾ã‚ŒãŸå‡¦ç?‚’追åŠ?—ãŸæ„Ÿã˜ã«ãªã‚Šã¾ã™ã?
1170 *
1171 * @og.rev 4.0.0.0 (2007/10/26) 空白ã®ãƒˆãƒªãƒ??ç?‚’追åŠ?
1172 *
1173 * @param in 変æ›å…??æ–?—å?
1174 * @param minFraction å¤‰æ›æ™‚ã?少数点以下ã?å›ºå®šæ¡æ•°
1175 *
1176 * @return カンマ編é›?¾Œã?æ•°å—åž‹æ–?—å?
1177 */
1178 public static String numberFormat( final String in, final int minFraction ) {
1179 if( in == null || in.length() == 0 ) { return in ; }
1180
1181 // 4.0.0.0 (2007/10/26)
1182 String tmp = in.trim();
1183
1184 if( tmp.length() == 0 ) { return tmp ; }
1185
1186 char[] chs = tmp.toCharArray();
1187 int pos = 0;
1188
1189 // 整数部ã®è¨å®?
1190 boolean firstZero = true;
1191 StringBuilder buf1 = new StringBuilder();
1192 while( pos < chs.length ) {
1193 char ch = chs[pos++];
1194 if( ch == '.' ) { break; }
1195 else if( ch != '-' && ch != ',' && ( ch != '0' || !firstZero )) {
1196 buf1.append( ch );
1197 firstZero = false;
1198 }
1199 }
1200 if( buf1.length() == 0 ) {
1201 buf1.append( '0' );
1202 }
1203
1204 for( int i=buf1.length()-3; i>0; i-=3 ) {
1205 buf1.insert( i,',' );
1206 }
1207 if( chs[0] == '-' ) { buf1.insert( 0,'-' ); }
1208
1209 // 少数部ã®è¨å®?
1210 // 3.6.0.3 (2004/10/05) æ¡æ•°ãŒå¤šã„å ´åˆã§ã‚‚ã‚«ãƒ?ƒˆã—ãªã?
1211 StringBuilder buf2 = new StringBuilder();
1212 while( pos < chs.length ) {
1213 buf2.append( chs[pos++] );
1214 }
1215
1216 while( buf2.length() < minFraction ) {
1217 buf2.append( '0' );
1218 }
1219
1220 if( buf2.length() > 0 ) {
1221 buf1.append( '.' ).append( buf2 );
1222 }
1223
1224 return buf1.toString();
1225 }
1226
1227 /**
1228 * è˜åˆ¥id ã«å¿œã˜ã?オブジェクトを作æ?ã—ã¾ã™ã?
1229 * 作æ?ã™ã‚‹ã«ã¯ã€ãƒ‡ãƒ•ォルトコンストラクターãŒå¿?¦ã§ã™ã?
1230 *
1231 * @param cls 作æ?ã™ã‚‹ã‚¯ãƒ©ã‚¹ã®ãƒ•ルãƒã?ãƒ?
1232 *
1233 * @return オブジェク�
1234 * @throws RuntimeException 何らã‹ã?エラーãŒç™ºç”Ÿã—ãŸå?å?
1235 */
1236 public static Object newInstance( final String cls ) {
1237 return newInstance( cls,Thread.currentThread().getContextClassLoader() );
1238 }
1239
1240 /**
1241 * æŒ?®šã•れãŸã‚¯ãƒ©ã‚¹ãƒãƒ¼ãƒ?‚’使ã£ã¦ã€è˜åˆ¥id ã«å¿œã˜ã?オブジェクトを作æ?ã—ã¾ã™ã?
1242 * 作æ?ã™ã‚‹ã«ã¯ã€ãƒ‡ãƒ•ォルトコンストラクターãŒå¿?¦ã§ã™ã?
1243 * initialize パラメータ㯠true 相å½?ãれã¾ã§ã«åˆæœŸåŒ–ã•れã¦ã?ªã??åˆã ã‘å?期化)ã§ã™ã?
1244 *
1245 * @param cls 作æ?ã™ã‚‹ã‚¯ãƒ©ã‚¹ã®ãƒ•ルãƒã?ãƒ?
1246 * @param loader 作æ?ã™ã‚‹ã‚¯ãƒ©ã‚¹ã®ã‚¯ãƒ©ã‚¹ãƒãƒ¼ãƒ?
1247 *
1248 * @return オブジェク�
1249 * @throws RuntimeException 何らã‹ã?エラーãŒç™ºç”Ÿã—ãŸå?å?
1250 */
1251 public static Object newInstance( final String cls,final ClassLoader loader ) {
1252 try {
1253 return Class.forName( cls,true,loader ).newInstance();
1254 }
1255 catch( ClassNotFoundException ex1 ) {
1256 String errMsg = "クラスãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。class=[" + cls + "]" + CR
1257 + ex1.getMessage() ;
1258 throw new RuntimeException( errMsg,ex1 );
1259 }
1260 catch( LinkageError ex2 ) {
1261 String errMsg = "リンケージãŒå¤±æ•—ã—ã¾ã—ãŸã€‚class=[" + cls + "]" + CR
1262 + ex2.getMessage();
1263 throw new RuntimeException( errMsg,ex2 );
1264 }
1265 catch( InstantiationException ex3 ) {
1266 String errMsg = "インスタンスã®ç”Ÿæ?ãŒå¤±æ•—ã—ã¾ã—ãŸã€‚class=[" + cls + "]" + CR
1267 + ex3.getMessage() ;
1268 throw new RuntimeException( errMsg,ex3 );
1269 }
1270 catch( IllegalAccessException ex4 ) {
1271 String errMsg = "クラスã¾ãŸã?åˆæœŸåŒ–åã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。class=[" + cls + "]" + CR
1272 + ex4.getMessage();
1273 throw new RuntimeException( errMsg,ex4 );
1274 }
1275 catch( RuntimeException ex5 ) { // 3.6.0.0 (2004/09/17)
1276 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ class=[" + cls + "]" + CR
1277 + ex5.getMessage() ;
1278 throw new RuntimeException( errMsg,ex5 );
1279 }
1280 }
1281
1282 /**
1283 * æŒ?®šã?URLæ–?—å?åŒå£«ã‚’é?çµã•ã›ã¾ã™ã?
1284 * ãã?ã¨ãã?後方URLãŒã?絶対パスã®å ´åˆã?ã€??çµã›ã?後方URLã‚’è¿”ã—ã¾ã™ã?
1285 *
1286 * 絶対パスã‹ã©ã?‹ã¯ã€??常ã®ãƒ•ァイル属æ?ã¨åŒæ§˜ã«ã€å?é ãŒã?'/' (UNIX)ã¾ãŸã?ã€?
1287 * ?’æ–‡å—ç›®ãŒã?":" (Windows)ã®å ´åˆã?ã¾ãŸã?ã€å?é ã?"\" (ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‘ス)ã§
1288 * å§‹ã¾ã‚‹å?åˆã§åˆ¤æ–ã—ã¾ã™ã?
1289 * é€£çµæ™‚ã«ã€å‰æ–¹URLã®æœ«å°¾ã« "/" ã‚’ä»˜åŠ ã—ã¾ã™ã?
1290 *
1291 * @og.rev 5.0.0.1 (2009/08/15) ä¸è¦ãªã‚ªãƒ–ジェクトã?生æ?を抑制ã™ã‚‹ã€?
1292 * @og.rev 5.6.5.2 (2013/06/21) 第?“引数をå¯å¤‰é•·å¼•æ•°ã«å¤‰æ›´ã®ãŸã‚ã€å»?¢
1293 *
1294 * @param url1 å…ˆé?URLæ–?—å?
1295 * @param url2 後方URLæ–?—å?(絶対パスã®å ´åˆã?ã€è¿”り値)
1296 *
1297 * @return URLæ–?—å?åŒå£«ã‚’é?çµçµæžœ url1 + url2(url2ãŒçµ¶å¯¾ãƒ‘スã®å ´åˆã?ã€url2ã®ã¿)
1298 */
1299 // public static String urlAppend( final String url1,final String url2 ) {
1300 // if( url2 == null || url2.length() == 0 ) { return url1 ; }
1301 // else if( ( url1 == null || url1.length() == 0 ) ||
1302 // ( url2.charAt(0) == '/' ) || // 実ディレクトリã?UNIX
1303 // ( url2.length() > 1 && url2.charAt(1) == ':' ) || // 実ディレクトリã?Windows
1304 // ( url2.charAt(0) == '\\' ) ) { // 実ディレクトリã?ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‘ス
1305 // return url2 ;
1306 // }
1307 //
1308 // StringBuilder rtnUrl = new StringBuilder( url1.length() + url2.length() + 1 );
1309 //
1310 //// if( url2 == null || url2.length() == 0 ) { rtnUrl.append( url1 ); }
1311 //// else if( url1 == null || url1.length() == 0 ) { rtnUrl.append( url2 ); }
1312 //// else if( ( url2.charAt(0) == '/' ) || // 実ディレクトリã?UNIX
1313 //// ( url2.length() > 1 && url2.charAt(1) == ':' ) || // 実ディレクトリã?Windows
1314 //// ( url2.charAt(0) == '\\' ) ) { // 実ディレクトリã?ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‘ス
1315 //// rtnUrl.append( url2 );
1316 //// }
1317 //// else {
1318 // char ch = url1.charAt( url1.length()-1 ) ;
1319 // if( ch == '/' || ch == '\\' ) {
1320 // rtnUrl.append( url1 ).append( url2 ) ;
1321 // }
1322 // else {
1323 // rtnUrl.append( url1 ).append( "/" ).append( url2 ) ;
1324 // }
1325 //// }
1326 //
1327 // return rtnUrl.toString() ;
1328 // }
1329
1330 /**
1331 * æŒ?®šã?URLæ–?—å?åŒå£«ã‚’é?çµã•ã›ã¾ã™ã?
1332 * ãã?ã¨ãã?後方URLãŒã?絶対パスã®å ´åˆã?ã€??çµã›ã?後方URLã‚’è¿”ã—ã¾ã™ã?
1333 * 第?’引数以é™ã?ã€çµ¶å¯¾ãƒ‘ス判定をã›ãšç›´å‰ã?URLã®æœ«å°¾åˆ¤å®šã?ã¿ã§é€£çµã—ã¾ã™ã?
1334 *
1335 * 絶対パスã‹ã©ã?‹ã¯ã€??常ã®ãƒ•ァイル属æ?ã¨åŒæ§˜ã«ã€å?é ãŒã?'/' (UNIX)ã¾ãŸã?ã€?
1336 * ?’æ–‡å—ç›®ãŒã?":" (Windows)ã®å ´åˆã?ã¾ãŸã?ã€å?é ã?"\" (ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‘ス)ã§
1337 * å§‹ã¾ã‚‹å?åˆã§åˆ¤æ–ã—ã¾ã™ã?
1338 * é€£çµæ™‚ã«ã€å‰æ–¹URLã®æœ«å°¾ã« "/" ã‚’ä»˜åŠ ã—ã¾ã™ã?
1339 *
1340 * 処ç??äº’æ›æ€§ç¢ºä¿ã?ãŸã‚ã€ç¬¬?“引数ã®å¯å¤‰é•·å¼•数を追åŠ?—ã¦ã?¾ã™ã?
1341 *
1342 * @og.rev 5.0.0.1 (2009/08/15) ä¸è¦ãªã‚ªãƒ–ジェクトã?生æ?を抑制ã™ã‚‹ã€?
1343 * @og.rev 5.6.5.2 (2013/06/21) 第?“引数をå¯å¤‰é•·å¼•æ•°ã«å¤‰æ›´
1344 *
1345 * @param url1 å…ˆé?URLæ–?—å?
1346 * @param url2 後方URLæ–?—å?(絶対パスã®å ´åˆã?ã€è¿”り値)
1347 * @param urls 後方URLæ–?—å?
1348 *
1349 * @return URLæ–?—å?åŒå£«ã®é€£çµçµæžœ url1 + url2(url2ãŒçµ¶å¯¾ãƒ‘スã®å ´åˆã?ã€url2ã‹ã‚‰é€£çµé–‹å§?
1350 */
1351 public static String urlAppend( final String url1,final String url2,final String... urls ) {
1352 StringBuilder rtnUrl = new StringBuilder( 200 );
1353
1354 if( url2 == null || url2.length() == 0 ) { rtnUrl.append( url1 ) ; }
1355 else if( ( url1 == null || url1.length() == 0 ) ||
1356 ( url2.charAt(0) == '/' ) || // 実ディレクトリã?UNIX
1357 ( url2.length() > 1 && url2.charAt(1) == ':' ) || // 実ディレクトリã?Windows
1358 ( url2.charAt(0) == '\\' ) ) { // 実ディレクトリã?ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‘ス
1359 rtnUrl.append( url2 ) ;
1360 }
1361 else {
1362 char ch = url1.charAt( url1.length()-1 ) ;
1363 if( ch == '/' || ch == '\\' ) {
1364 rtnUrl.append( url1 ).append( url2 ) ;
1365 }
1366 else {
1367 rtnUrl.append( url1 ).append( "/" ).append( url2 ) ;
1368 }
1369 }
1370
1371 // ã“ã“ã‹ã‚‰ãŒã?追åŠ??
1372 for( String url : urls ) {
1373 if( url != null && url.length() > 0 ) {
1374 char ch = rtnUrl.charAt( rtnUrl.length()-1 ) ;
1375 if( ch == '/' || ch == '\\' ) {
1376 rtnUrl.append( url ) ;
1377 }
1378 else {
1379 rtnUrl.append( "/" ).append( url ) ;
1380 }
1381 }
1382 }
1383
1384 return rtnUrl.toString() ;
1385 }
1386
1387 /**
1388 * getUnicodeEscape ã§ä½¿ç”¨ã™ã‚‹æ¡åˆã‚ã›ç”¨æ–?—å?é…å?ã§ã™ã?
1389 * Unicodeã® HexString 変æ›å¾Œã?æ¡ã«å¿œã˜ã¦ã€åŸ‹ã‚åˆã‚ã›ã—ã¾ã™ã?
1390 *
1391 */
1392 private static final String[] UTF_STR = { "�", "�", "�", "�", "&#x" };
1393
1394 /**
1395 * Unicodeæ–?—å?ã®å€¤ã‚?HTML ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—記å·(&#xZZZZ;)ã«å¤‰æ›ã—ã¾ã™ã?
1396 *
1397 * SJIS(JA16SJIS) ã§ä½œæ?ã•れãŸãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã«ã€?NVARCHAR2)を使用ã—ã¦ä¸å›½èªžç‰ã‚’登録ã™ã‚‹ã®ã¯
1398 * éžå¸¸ã«è¤?›‘ã§ã‹ã¤ã€ãƒªã‚¹ã‚¯ãŒå¤§ãã„処ç?«ãªã‚Šã¾ã™ã?
1399 * ORACLE殿ã§ã‚‚ã?自信をæŒã£ã¦ã¯å‹§ã‚られãªã?©Ÿè?ã¨ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’é ‚ã„ã¦ã?¾ã™ã?
1400 * ãã“ã§ã€HTMLã§ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—æ–‡å—を使用ã—ã¦ã€Unicodeã‚’æ–‡å—å?化ã—ã¦ç™»éŒ²ã™ã‚‹ç‚ºã®
1401 * DBType ã¨ã—ã¦ã€æ–°è¦ã«ä½œæ?ã—ã¾ã™ã?
1402 * ã“ã“ã§ã¯ã€å?力文å—ã‚’ã€ã‚ャラクタ(char)åž‹ã«åˆ?§£ã—ã?(&#xZZZZ;)ã«å¤‰æ›ã—ã¦ã?ã¾ã™ã?
1403 * よã£ã¦ã€??常ã«?‘æ–‡å?Shift-JISã§?’Byte,UTF-8ã§?“Byte)ãŒã??˜Byteã«ãªã‚Šã¾ã™ã?
1404 * ã“ã?変æ›ã•ã‚ŒãŸæ–‡å—å?ã‚’ã?HTML上ã§ãã?ã¾ã¾å–り出ã™ã¨ã€å?ã®Unicodeæ–?—ã«æˆ»ã‚‹ç‚ºã€?
1405 * 通常ã®Shift-JISã§ã¯ã€æ‰±ãˆãªã?–‡å?ä¸å›½èªžãªã©)ã§ã‚‚表示å¯èƒ½ã«ãªã‚Šã¾ã™ã?
1406 * ã“ã“ã§ã¯ã€?ãƒã‚¤ãƒˆæ–‡å—ã?ã¿ã€å¤‰æ›ã—ã¦ã?¾ã™ã?
1407 *
1408 * @param value 変æ›å‰ã?æ–?—å?
1409 *
1410 * @return HTMLã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—記å·(&#xZZZZ;)
1411 */
1412 public static String getUnicodeEscape( final String value ) {
1413 if( value == null || value.length() == 0 ) { return ""; }
1414
1415 StringBuilder rtn = new StringBuilder( value.length() * 4 );
1416
1417 for( int i=0; i<value.length(); i++ ) {
1418 char ch = value.charAt(i);
1419
1420 if( ch > 0xff ) {
1421 String hex = Integer.toHexString( (int)ch ) ;
1422 rtn.append( UTF_STR[hex.length()] ).append( hex ).append( ";" );
1423 }
1424 else {
1425 rtn.append( ch );
1426 }
1427 }
1428
1429 return rtn.toString();
1430 }
1431
1432 /**
1433 * HTML ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—記å·(&#xZZZZ;)ã‚’Unicodeæ–?—å?ã«æˆ»ã—ã¾ã™ã?
1434 *
1435 * HTMLã§ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—æ–‡å—を使用ã—ã¦ç™»éŒ²ã•ã‚ŒãŸæ–‡å—ã‚’ã€Unicodeã«æˆ»ã—ã¾ã™ã?
1436 * (&#xZZZZ;)ã®?˜Byteã‚’ã?ã‚‚ã¨ã®ã‚ãƒ£ãƒ©ã‚¯ã‚¿ã‚³ãƒ¼ãƒ‰ã«æˆ»ã—ã?åˆæ?ã—ã¾ã™ã?
1437 * ã“ã“ã§ã¯ã€??å¸¸ã®æ–?—å?ã«æ··åœ¨ã—ãŸã‚¨ã‚¹ã‚±ãƒ¼ãƒ—æ–‡å—も戻ã›ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã?
1438 *
1439 * @param value HTMLã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—記å·(&#xZZZZ;)ã‚’å«ã‚?–‡å—å?
1440 *
1441 * @return 通常ã®Unicodeæ–?—å?
1442 */
1443 public static String getReplaceEscape( final String value ) {
1444 if( value == null || value.length() == 0 ) { return ""; }
1445
1446 StringBuilder rtn = new StringBuilder( value );
1447
1448 int st = rtn.indexOf( "&#" );
1449 while( st >= 0 ) {
1450 if( st+7 < rtn.length() && rtn.charAt( st+7 ) == ';' ) {
1451 int ch = Integer.parseInt( rtn.substring( st+3,st+7 ),16 );
1452 rtn.replace( st,st+8, Character.toString( (char)ch ) );
1453 }
1454 st = rtn.indexOf( "&#",st );
1455 }
1456
1457 return rtn.toString();
1458 }
1459
1460 /**
1461 * æ–?—å?ã‚’doubleã«å¤‰æ›ã—ã¾ã™ã?
1462 *
1463 * ã“れã¯ã€Double.parseDouble( value ) ã¨ã€ã»ã¼åŒã˜å‹•作を行ã„ã¾ã™ã?
1464 * å†?ƒ¨çš?«ã¯ã€å¼•数㮠カンãƒ?,) を削除ã—ãŸæ–?—å?ã‚’ã?Double.parseDouble( value )
1465 * ã«æ¸¡ã—ã¾ã™ã?
1466 * ã¾ãŸã?引数ãŒã?null,ã‚¼ãƒæ–?—å?,'_' ã®æ™‚ã«ã¯ã€?.0 ã‚’è¿”ã—ã¾ã™ã?
1467 *
1468 * @param value doubleã«å¤‰æ›ã™ã‚‹å…??æ–?—å?
1469 *
1470 * @return 変æ›å¾Œã?double数値
1471 */
1472 public static double parseDouble( final String value ) {
1473 double rtn ;
1474
1475 if( value == null || value.length() == 0 || value.equals( "_" ) ) {
1476 rtn = 0.0d;
1477 }
1478 else if( value.indexOf( ',' ) < 0 ) {
1479 rtn = Double.parseDouble( value );
1480 }
1481 else {
1482 char[] chs = value.toCharArray() ;
1483 int j=0;
1484 for( int i=0;i<chs.length; i++ ) {
1485 if( chs[i] == ',' ) { continue; }
1486 chs[j] = chs[i];
1487 j++;
1488 }
1489 rtn = Double.parseDouble( String.valueOf( chs,0,j ) );
1490 }
1491
1492 return rtn ;
1493 }
1494
1495 // 4.0.3.0 (2007/12/26) 色コードã«PURPLE を追åŠ?
1496 private static final Map<String,Color> CLR_MAP;
1497 static {
1498 CLR_MAP = new HashMap<String,Color>();
1499 CLR_MAP.put( "BLACK" ,Color.BLACK );
1500 CLR_MAP.put( "BLUE" ,Color.BLUE );
1501 CLR_MAP.put( "CYAN" ,Color.CYAN );
1502 CLR_MAP.put( "DARK_GRAY" ,Color.DARK_GRAY );
1503 CLR_MAP.put( "GRAY" ,Color.GRAY );
1504 CLR_MAP.put( "GREEN" ,Color.GREEN );
1505 CLR_MAP.put( "LIGHT_GRAY" ,Color.LIGHT_GRAY );
1506 CLR_MAP.put( "MAGENTA" ,Color.MAGENTA );
1507 CLR_MAP.put( "ORANGE" ,Color.ORANGE );
1508 CLR_MAP.put( "PINK" ,Color.PINK );
1509 CLR_MAP.put( "RED" ,Color.RED );
1510 CLR_MAP.put( "WHITE" ,Color.WHITE );
1511 CLR_MAP.put( "YELLOW" ,Color.YELLOW );
1512 CLR_MAP.put( "PURPLE" ,new Color( 8388736 ) ); // #800080
1513 }
1514
1515 /**
1516 * カラーã‚ーワードよりã?Colorオブジェクトを作æ?ã—ã¾ã™ã?
1517 *
1518 * æŒ?®šæ–‡å—å?ã¯ã€java.awt.Color クラスã®static フィールドåã§æŒ?®šã—ã¾ã™ã?
1519 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
1520 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , PURPLE ãŒæŒ‡å®šã§ãã¾ã™ã?
1521 * ã¾ãŸã?å…ˆé?ã«ã€? を付ã‘る事ã§ã€?XXXXXXå½¢å¼ã?16bitRGB表è¨?ã§ã‚‚指定å¯èƒ½ã§ã™ã?
1522 * static フィールドåã®Mapを管ç?—ã¦ã?¾ã™ãŒã€å˜åœ¨ã—ãªã??åˆã?ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã?
1523 *
1524 * @og.rev 3.8.9.1 (2007/06/29) æ–°è¦ä½œæ?
1525 * @og.rev 4.1.1.0 (2008/02/04) CLR_MAP ã«å˜åœ¨ã—ãªã??åˆã?エラーã«ã—ã¾ã™ã?
1526 *
1527 * @param value java.awt.Color ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’ç¤ºã™æ–‡å—å?ã¾ãŸã?ã€?XXXXXXå½¢å¼ã?16bitRGB表è¨?
1528 *
1529 * @return Colorオブジェク�
1530 * @see java.awt.Color#BLACK
1531 */
1532 public static Color getColorInstance( final String value ) {
1533 final Color clr ;
1534
1535 if( value.startsWith("#") ) {
1536 int code = Integer.parseInt( value.substring(1),16 );
1537 clr = new Color( code );
1538 }
1539 else {
1540 clr = CLR_MAP.get( value );
1541 if( clr == null ) {
1542 String errMsg = "æŒ?®šã?色コードã?使用ã§ãã¾ã›ã‚“ Color=[" + value + "]" + CR
1543 + "ColorMap=" + CLR_MAP.keySet().toString();
1544 throw new RuntimeException( errMsg );
1545 }
1546 }
1547
1548 return clr;
1549 }
1550
1551 /**
1552 * å¼•æ•°ã«æŒ?®šã•ã‚ŒãŸæ–?—å?ã®Nativeタイプを返ã—ã¾ã™ã?
1553 *
1554 * 1.STRING -> 数値以外ã?æ–?—å?(å…ˆé?ã®'-'ã€ã¾ãŸã?ä»»æ„ã?å ´æ‰??'.'を除ã?ãŒå«ã¾ã‚Œã¦ã?Ÿå ´å?
1555 * 2.DOUBLE -> 1以外ã§'.'ãŒå«ã¾ã‚Œã¦ã?‚‹å ´å?
1556 * 3.INT -> 1,2以�
1557 *
1558 * @og.rev 5.1.8.0 (2010/07/01) org.opengion.fukurou.model.NativeType ã®ãƒ¡ã‚½ãƒ?ƒ‰ã‚’採用ã€ã“ã“ã?å»?¢
1559 *
1560 * @param str ãƒã‚§ãƒ?‚¯ã‚’è¡Œã†æ–?—å?
1561 *
1562 * @return NATIVEã®åž‹ã?è˜åˆ¥ã‚³ãƒ¼ãƒ?
1563 * @see org.opengion.fukurou.model.NativeType
1564 */
1565 // public static NativeType getNativeType( final String str ) {
1566 // if( str == null || str.length() == 0 ) { return NativeType.STRING; }
1567 //
1568 // NativeType type = NativeType.INT;
1569 // char ch;
1570 // for( int i=0; i<str.length(); i++ ) {
1571 // ch = str.charAt( i );
1572 // if( ch < '0' || ch > '9' ) {
1573 // if( ch != '-' || ( ch == '-' && i > 0 ) ) {
1574 // if( ch == '.' ) {
1575 // type = NativeType.DOUBLE;
1576 // }
1577 // else {
1578 // type = NativeType.STRING;
1579 // break;
1580 // }
1581 // }
1582 // }
1583 // }
1584 // return type;
1585 // }
1586
1587 /**
1588 * 引数ã‹ã‚‰spanã‚¿ã‚°ã‚’å–り除ã?¦è¿”ã—ã¾ã™ã?
1589 *
1590 * 引数ãŒã?<span ?¥?¥?¥>XXXX</span>å½¢å¼ã?å ´åˆã?XXXX ã®ã¿å‡ºåŠ›ã—ã¾ã™ã?
1591 *
1592 * @og.rev 4.3.4.3 (2008/12/22) TableWriterã§åˆ©ç”¨ã—ã¦ã?Ÿã‚‚ã?ã‚’ç§»å‹?
1593 *
1594 * @param data å…??Stringæ–?—å?
1595 *
1596 * @return spanã‚¿ã‚°ãŒå–り除ã‹ã‚ŒãŸæ–‡å—å?
1597 */
1598 public static String spanCut( final String data ) {
1599 String rtn = data;
1600 if( data != null && data.startsWith( "<span" ) ) {
1601 int st = data.indexOf( '>' );
1602 int ed = data.indexOf( "</span>",st );
1603 rtn = data.substring( st+1,ed );
1604 }
1605 return rtn ;
1606 }
1607
1608 /**
1609 * 簡易CSSå½¢å¼ã?フォーマットをã€Mapã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
1610 *
1611 * 簡易CSSå½¢å¼ã¨ã¯ã€ã‚»ãƒ¬ã‚¯ã‚¿ã®ãªã??{ プãƒãƒ‘ティ1 : 値1 ; ・・・ } å½¢å¼ã¨ã—ã¾ã™ã?
1612 * ã“れをã?プãƒãƒ‘ティ1 㨠値1 ã®Map ã«ã‚»ãƒ?ƒˆã™ã‚‹å‡¦ç?‚’行ã„ã¾ã™ã?
1613 * コメントã?ã€å‰Šé™¤ã•れã¾ã™ã?ã¾ãŸã?åŒä¸??ãƒãƒ‘ティãŒè¨˜è¿°ã•れã¦ã?‚‹å ´åˆã?ã€å¾Œå?ç?‚’採用ã—ã¾ã™ã?
1614 *
1615 * ãªãŠã?入力テã‚ストãŒã€null ã‹ã?{…} ãŒå˜åœ¨ã—ãªã??åˆã?ã€null ã‚’è¿”ã—ã¾ã™ã?
1616 *
1617 * @og.rev 5.6.5.2 (2013/06/21) æ–°è¦è¿½åŠ?
1618 *
1619 * @param cssText 簡易CSSå½¢å¼ã?フォーマット文å—å?
1620 *
1621 * @return パã?ã‚¹çµæžœã®Map
1622 */
1623 public static Map<String,String> cssParse( final String cssText ) {
1624 Map<String,String> map = null;
1625
1626 if( cssText != null ) {
1627 // ã¾ãšã‚³ãƒ¡ãƒ³ãƒˆã‚’削除ã—ã¾ã™ã?
1628 StringBuilder buf = new StringBuilder( cssText );
1629
1630 int ad1 = buf.indexOf( "/*" );
1631 while( ad1 >= 0 ) {
1632 int ad2 = buf.indexOf( "*/" , ad1 );
1633 if( ad2 < 0 ) { buf = buf.delete( ad1,buf.length() ); break; } // é–‰ã˜ã¦ãªã‘れã°ä»¥é™ã‚’全削除
1634 buf = buf.delete( ad1,ad2+2 );
1635 ad1 = buf.indexOf( "/*" ); // コメントã?削除ã•れãŸã?ã§ã€å?ã‚ã‹ã‚‰æ¤œç´¢ã™ã‚‹ã€?
1636 }
1637
1638 // 処ç?¯¾è±¡ã¯ã€{ ??} ã®é–“ã?æ–?—å?ã€?
1639 ad1 = buf.indexOf( "{" );
1640 int ad2 = buf.indexOf( "}",ad1 );
1641 if( ad1 >= 0 && ad2 > 0 ) {
1642 String tempText = buf.substring( ad1+1,ad2 ); // ã“れãŒå?ç?¯¾è±¡ã®æ–?—å?
1643
1644 String[] recode = tempText.split( ";" ); // KEY1 : VAL1; ã® ; ã§åˆ?‰²ã™ã‚‹ã€?
1645
1646 for( int i=0; i<recode.length; i++ ) {
1647 int ad = recode[i].indexOf( ':' );
1648 if( ad > 0 ) {
1649 String key = recode[i].substring( 0,ad ).trim();
1650 String val = recode[i].substring( ad+1 ).trim();
1651 if( key.isEmpty() || val.isEmpty() ) { continue; }
1652
1653 if( map == null ) { map = new HashMap<String,String>(); } // 対象ãƒ??ã‚¿ãŒã‚る時ã?‘Mapを作りãŸã‹ã£ãŸã?ã§ã€?
1654 map.put( key,val );
1655 }
1656 }
1657 }
1658 }
1659 return map ;
1660 }
1661 }