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