atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
wiki @Wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
wiki @Wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
wiki @Wiki
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • wiki @Wiki
  • 共通関数

wiki @Wiki

共通関数

最終更新:2006年05月19日 20:42

匿名ユーザー

- view
管理者のみ編集可

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.io.UnsupportedEncodingException;

/**
* 文字列ユーティリティクラス。<br>
* <br>
* 以下の機能を提供します。<br>
* <ul>
* <li>null チェック</li>
* <li>空チェック</li>
* <li>有効データチェック</li>
* <li>数値チェック</li>
* <li>末尾空白削除</li>
* <li>半角文字構成チェック</li>
* <li>半角数字構成チェック</li>
* <li>全角カナ構成チェック</li>
* <li>半角カナ構成チェック</li>
* <li>指定文字列存在チェック</li>
* <li>文字列置換</li>
* <li>整数から小数に変換</li>
* <li>小数点以下桁数変換</li>
* <li>小数から整数に変換</li>
* <li>指定桁数まで文字を追加</li>
* <li>ゼロパディング</li>
* <li>ゼロサプレス</li>
* <li>数値計算(加算)</li>
* <li>数値計算(減算)</li>
* <li>数値計算(乗算)</li>
* <li>数値計算(除算)</li>
* <li>全角文字チェック</li>
* <li>文字列置換</li>
* </ul>
*/
public class UtilString {
 
  /**
   * デフォルトコンストラクタ。
   */
  private UtilString(){
  }
 
  /**
   * オブジェクト data がnullであるか検査します。<br>
   * <br>
   * data が null の場合は true を返します。<br>
   * data が null でない場合は falseを返します。<br>
   * <br>
   * @param  data  対象文字列
   * @return  result  チェック結果
   */
  public static boolean isNull(Object data){
    if(data == null)
      return true;
    else
      return false;
  }
 
  /**
   * 文字列 data が空であるか検査します。<br>
   * <br>
   *spaceFlgで末尾の空白を許容するか選択できます。<br>
   * spaceFlg がtrueの場合は末尾の空白を許容します。<br>
   * spaceFlg がfalseの場合は末尾の空白を許容しません。<br>
   * data が空である場合は true を返します。<br>
   * data が空でない場合は false を返します。<br>
   * data が null である場合は true を返します。<br>
   * <br>
   * @param  data    判定対象の文字列
   * @param  spaceFlg  空白許可フラグ
   * @return  result    チェック結果
   */
  public static boolean isEmpty(String data, boolean spaceFlg) {
    // null チェック
    if(isNull(data))
      return true;
   
   //空白を許容しない場合は末尾の空白をトリムする
    if(!spaceFlg)
      data = rtrim(data);
   
    if(data.length() < 1)
      return true;
    else
      return false;
  }

  /**
   * 文字列dataがデータとして有効であるか検査します。<br>
   * <br>
  *データとして有効な範囲は以下の通りです。<br>
   * ・null でない<br>
   * ・空でない<br>
   * ・全角・半角空白だけの文字列でない<br>
   * 有効データである場合は trueを返します。<br>
   * 有効データでない場合はfalseを返します。<br>
   * <br>
   * @param data 対象文字列
   * @return boolean チェック結果
   */
  public static boolean isValid(String data) {
    // 全角空白を半角空白に置換
    String s = replace(data,UtilConstants.S_FULL_SPACE,UtilConstants.S_HALF_SPACE);
   
    // 空白を取り除いて判断
    if(s.trim().length() == 0)
      return false;
    else
      return true;
  }

  /**
   * 文字列 data が数値であるか検査します。<br>
   * <br>
   * 数値の範囲は以下の通りです。<br>
   * ・null でない<br>
   * ・空でない<br>
   * ・全角・半角空白だけの文字列でない<br>
   * マイナスの値と小数に対応しています。<br>
   * 数値である場合は true を返す<br>
   * 数値でない場合は false を返す<br>
   * <br>
   * @param  data  対象文字列
   * @return  result  チェック結果
   */
  public static boolean isNumeric(String data){
    // null チェック
    if(isNull(data))
      return false;
   
    // 有効データチェック
    if(!isValid(data))
      return false;
   
    // BigDecimal に変換
    try{
      new BigDecimal(data);
    }catch(NumberFormatException e){
     //例外が発生した場合は数値として正しくない
      return false;
    }
   
    return true;
  }

  /**
   * 文字列 data の末尾の空白を削除します。<br>
   * <br>
  *末尾の全角空白・半角空白を取り除きます。<br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data  文字列
   * @return result 文字列の末尾のスペースを取り除いた文字列
   */
  public static String rtrim(String data) {
    // null チェック
    if(isNull(data))
      return UtilConstants.S_HALF_SPACE;
   
    while(data.endsWith(" ") || data.endsWith(" ")) {
      data = data.substring(0, data.length() - 1);
    }
   
    return data;
  }
  
  /**
   * 文字列dataが半角文字で構成されているか検査します。<br>
   * <dr>
   * 半角文字の範囲は以下の通りです。<br>
   * ・半角英字 !~~<br>
   * ・半角カナ 。~゚<br>
   * ・null でない<br>
   * ・空でない<br>
   * 文字列中の半角空白は許容されます。<br>
   *spaceFlgで空白のみの文字列を許容するか選択できます。<br>
   * spaceFlg がtrueの場合は空白のみの文字列も許容します。<br>
   * spaceFlg がfalseの場合は空白のみの文字列は許容しません。<br>
   * 半角文字のみで構成されている場合はtrueを返します。<br>
   * 半角文字のみで構成されていない場合はfalseを返します。<br>
   * <br>
   * @param  data     対象の文字列
   * @param  spaceFlg  空白許容フラグ
   * @return result    チェック結果
   */
  public static boolean isHalfChar(String str, boolean spaceFlg){
    // null チェック
    if(isNull(str))
      return false;
   
    if(!spaceFlg){
      // 有効データチェック
      if (!UtilString.isValid(str))
        return false;
    }

    char[] chars = str.toCharArray( );
    int length = chars.length;

    for (int i = 0; i < length; i++){
      // 範囲に入っていない場合は false
      if(chars[i] != UtilConstants.C_HALF_SPACE
       &&!(UtilConstants.C_HALF_NUMBER_AND_ALPHABET_START <= chars[i]&&chars[i] <= UtilConstants.C_HALF_NUMBER_AND_ALPHABET_END)
        && !(UtilConstants.C_HALF_KATAKANA_START<=chars[i] && chars[i] <=UtilConstants.C_HALF_KATAKANA_END)){
        return false;
      }
    }
    return true;
  }
 
  /**
   * 文字列dataが半角数字で構成されているか検査します。<br>
   * <br>
   * 半角数字の範囲は以下の通りです。<br>
   * ・半角数字 u0030~u0039<br>
   * ・null でない<br>
   * ・空でない<br>
   * ・全角・半角空白だけの文字列でない<br>
   * ・半角空白が混在していない<br>
   *periodFlgで半角ピリオド(小数点)を許容するか選択できます。<br>
   * periodFlg がtrueの場合はピリオドを許容します。<br>
   * periodFlg がfalseの場合はピリオドを許容しません。<br>
   * ピリオドが複数混在していてもtrueを返します。<br>
   *minusFlgで半角ハイフン(マイナス値)を許容するか選択できます。<br>
   * minusFlg がtrueの場合はハイフンを許容します。<br>
   * minusFlg がfalseの場合はハイフンを許容しません。<br>
   * ハイフンが複数混在している場合もtrueを返します。
   * 半角数字のみで構成されている場合はtrueを返します。<br>
   * 半角数字のみで構成されていない場合はfalseを返します。<br>
   * 数値としての検査をする場合はisNumeric()メソッドを使用してください。<br>
   * <br>
   * @param  data    対象の文字列
   * @param  periodFlg  ピリオド許可フラグ
   * @param  minusFlg  ハイフン許可フラグ
   * @return  result    チェック結果
   */
  public static boolean isHalfNumber(String data, boolean periodFlg,booleanhyphenFlg) {
    // null チェック
    if(isNull(data))
      return false;
   
    // 有効データチェック
    if(!isValid(data))
      return false;

    char[] chars = data.toCharArray( );
   
    // チェック結果
    boolean result = false;
   
    for(int i = 0; i < chars.length; i++) {
      // 初期化
      result = false;
     
      // 範囲に入っている場合に true となる
      // 半角数字
      if((UtilConstants.C_HALF_NUMBER_START <= chars[i]&&chars[i] <= UtilConstants.C_HALF_NUMBER_END))
        result = true;
     
      // 半角ピリオド
      if(periodFlg)
        if(UtilConstants.C_HALF_PERIOD == chars[i])
          result = true;
     
      // 半角マイナス
      if(hyphenFlg)
        if(UtilConstants.C_HALF_HYPHEN == chars[i])
          result = true;
     
      if(!result)
        return false;
    }
    return result;
  }
 
  /**
   * 文字列dataが全角カナで構成されているか検査します。<br>
   * <br>
   * 全角カナの範囲は以下の通りです。<br>
   * ・全角句読点 u3001~u3002<br>
   * ・全角横線点 u30FB~u30FC<br>
   * ・全角濁点半濁点 u309B~u309C<br>
   * ・全角カナ u30A1~u30FE<br>
   * ・全角空白 u3000<br>
   * ・null でない<br>
   * ・空でない<br>
   * ・全角・半角空白だけの文字列でない<br>
   *spaceFlgで全角空白を許容するか選択できます。<br>
   * spaceFlg が trueの場合は空白を許容します。<br>
   * spaceFlg がfalseの場合は空白を許容しません。<br>
   * 全角カナで構成されている場合はtrueを返します。<br>
   * 全角カナで構成されていない場合はfalseを返します。<br>
   * <br>
   * @param  data    対象の文字列
   * @param  spaceFlg  全角空白許可フラグ
   * @return  result    チェック結果
   */
  public static boolean isFullKana(String data, boolean spaceFlg) {
    // null チェック
    if(isNull(data))
      return false;
   
    // 有効データチェック
    if(!isValid(data))
      return false;
   
    char[] chars = data.toCharArray( );
    int length = chars.length;
   
    // チェック結果
    boolean result = false;
   
    for(int i = 0; i < length; i++){
      // 初期化
      result = false;
     
      // 範囲に入っている場合に true となる
      // 全角カナ
      if((UtilConstants.C_FULL_KATAKANA_START <=chars[i]&& chars[i] <= UtilConstants.C_FULL_KATAKANA_END)
        || (UtilConstants.C_FULL_KUTOUTEN_START <=chars[i]&& chars[i] <= UtilConstants.C_FULL_KUTOUTEN_END)
        || (UtilConstants.C_FULL_DAKUTEN_HANDAKUTEN_START<=chars[i] && chars[i]<=UtilConstants.C_FULL_DAKUTEN_HANDAKUTEN_END)
        || (UtilConstants.C_FULL_YOKOSEN_AND_TEN_START<=chars[i] && chars[i] <=UtilConstants.C_FULL_YOKOSEN_AND_TEN_END)){
        result = true;
      }
     
      // 全角空白
      if(spaceFlg)
        if(UtilConstants.C_FULL_SPACE == chars[i])
          result = true;
     
      // result が false の場合、false を返す
      if(!result)
        return result;
    }
   
    return result;
  }

  /**
   * 文字列dataが半角カナで構成されているか検査します。<br>
   * <br>
   * 半角カナの範囲は以下の通りです。<br>
   * ・半角カナ uFF61~uFF9F<br>
   * ・半角空白 <br>
   * ・null でない<br>
   * ・空でない<br>
   * ・全角・半角空白だけの文字列でない<br>
   *spaceFlgで半角空白を許容するか選択できます。<br>
   * spaceFlg が trueの場合は空白を許容します。<br>
   * spaceFlg がfalseの場合は空白を許容しません。<br>
   * 半角カナのみで構成されている場合はtrueを返します<br>
   * 半角カナのみで構成されていない場合はfalseを返します<br>
   * <br>
   * @param  data    対象の文字列
   * @param  spaceFlg  半角空白許可フラグ
   * @return  result    チェック結果
   */
  public static boolean isHalfKana(String data, boolean spaceFlg) {
    // null チェック
    if(isNull(data))
      return false;
   
    // 有効データチェック
    if(!isValid(data))
      return false;
   
    char[] chars = data.toCharArray( );
    int length = chars.length;
   
    // チェック結果
    boolean result = false;
   
    for(int i = 0; i < length; i++) {
      // 初期化
      result = false;
     
      // 範囲に入っている場合に true となる
      // 半角カナ
      if((UtilConstants.C_HALF_KATAKANA_START <=chars[i]&& chars[i] <= UtilConstants.C_HALF_KATAKANA_END)) {
        result = true;
      }
     
      // 半角空白
      if(spaceFlg)
        if(UtilConstants.C_HALF_SPACE == chars[i])
          result = true;
     
      // result が false の場合 false を返す
      if(!result)
        return result;
    }
    return result;
  }

  /**
  *文字列中に指定語句が存在するか検査します。<br>
   * <br>
   * 指定語句が存在する場合はtrueを返します。<br>
   * 指定語句が存在しない場合はfalseを返します。<br>
   * <br>
   * @param  data  対象文字列
   * @param  target  検索語句
   * @return  result  チェック結果
   */
  public static boolean isOccurrence(String data, String target){
    // null チェック
    if(isNull(data) || isNull(target))
      return false;
   
    // size チェック
    if(data.length() < target.length())
      return false;
   
    // インデックスリスト
    List indexList = new ArrayList();
   
    // 文字存在チェック
    for(int i= 0; i < target.length(); i++){
      // インデックス取得
      int index = data.indexOf(target.charAt(i));
     
     //指定語句の文字が対象文字列中に存在するかチェック
      if(index == -1)
        return false;
     
      // インデックスリストに追加
      indexList.add(String.valueOf(index));
    }
   
   //文字一致チェック(インデックスが連番になっているかチェック)
    for(int i = 0; i < indexList.size(); i++){
      // i番目のインデックスを取得
      int index = Integer.parseInt((String)indexList.get(i));
     
      // 仮の前インデックスを設定
      int preIndex = index - 1;
     
     //iが0番目以外の時にpreIndexにi-1のインデックスを設定する
      if(i != 0)
        preIndex = Integer.parseInt((String)indexList.get(i-1));
     
      // 連番であるか判断
      if(!(index - 1 == preIndex))
        return false;
    }
   
    return true;
  }
 
  /**
   *文字列中の文字を指定文字に置換します。<br>
   * <br>
   * 文字列 data 中の target をvalueに置き換えます。<br>
   * 引数が不正だった場合は nullを返します。<br>
   * <br>
   * @param  data  文字列
   * @param  target  対象の文字
   * @param  value  置き換える文字
   * @return  result  置換後の文字列
   */
  public static String replace(String data, String target, String value){
    // null チェック
    if(isNull(data) || isNull(target) || isNull(value))
      return null;
   
    StringBuffer sb = new StringBuffer(data);
   
    String w = new String(data);
   
    int start = 0;
    int end = 0;

    while(true){
      start = w.indexOf(target);
     
      if (start == -1)
        return w;
     
      end = start + target.length();
      if(end == -1)
        return w;
     
      if(value == null)
        value = UtilConstants.S_EMPTY;
     
      w = sb.replace(start, end, value).toString();
    }
  }
 
  /**
   * 文字列整数 data を小数に変換します。<br>
   * <br>
   *dataに小数を指定することで端数処理をすることが可能です。<br>
  *この場合は指定した小数桁数になるよう端数処理をします。<br>
   * scaleで小数点以下の桁数を指定できます。<br>
   * mode で端数処理の方法を選択できます。<br>
   * mode が1の場合は端数を切り上げます。(RoundUp)<br>
   * mode が2の場合は端数を四捨五入します。(RoundHalfUp)<br>
   * mode が3の場合は端数を切り捨てます。(RoundDown)<br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data  整数(または小数)
   * @param  scale  小数点以下桁数
   * @param  mode  端数処理
   * @return  result  小数
   */
  public static String cnvDecimal(String data, int scale, int mode){
   
    // data 数値チェック
    if(!isNumeric(data))
      return null;
   
    // 端数処理設定
    switch(mode){
      case 1:
        mode = BigDecimal.ROUND_UP;
        break;
      case 2:
        mode = BigDecimal.ROUND_HALF_UP;
        break;
      case 3:
        mode = BigDecimal.ROUND_DOWN;
        break;
      default:
        return null;
    }
   
    // BigDecimal に変換
    BigDecimal result = new BigDecimal(data);
    // 桁数設定・端数処理
    result.setScale(scale, mode);
   
    return result.toString();
  }
 
  /**
   * 文字列小数 data を整数に変換します。<br>
   * <br>
   *modeで小数点第1桁の端数処理の方法を選択できます。<br>
   * mode が1の場合は端数を切り上げます。(RoundUp)<br>
   * mode が2の場合は端数を四捨五入します。(RoundHalfUp)<br>
   * mode が3の場合は端数を切り捨てます。(RoundDown)<br>
   * 引数が不正の場合は null を返します<br>
   * <br>
   * @param  data  小数
   * @param  mode  端数処理
   * @return  result  整数
   */
  public static String cnvIntegral(String data, int mode){
   
    // data 数値チェック
    if(!isNumeric(data))
      return null;
   
    // 端数処理設定
    switch(mode){
      case 1:
        mode = BigDecimal.ROUND_UP;
        break;
      case 2:
        mode = BigDecimal.ROUND_HALF_UP;
        break;
      case 3:
        mode = BigDecimal.ROUND_DOWN;
        break;
      default:
        return null;
    }
   
    // BigDecimal に変換
    BigDecimal result = new BigDecimal(data);
    // 端数処理
    result = result.setScale(0, mode);
   
    return result.toString();
  }
 
  /**
   * 文字列数値を先頭の0を除いた数値に変換します。<br>
   * <br>
   * 変換イメージ[001000 → 1000]<br>
   * マイナスの値や小数に対応しています。<br>
   * 引数が不正だった場合は nullを返します。<br>
   * <br>
   * @param  data  変換前文字列
   * @return  result  変換後文字列
   */
  public static String cnvNumber(String data){
    // null チェック
    if(UtilString.isNull(data))
      return null;
   
    // 数値チェック
    if(!UtilString.isNumeric(data))
      return null;
   
    // 変換
    return new BigDecimal(data).toString();
  }
 
  /**
   * 文字列 data に挿入文字 appendix を指定桁数digitになるまで追加します。<br>
   * <br>
   * 半角文字に対応しています。<br>
   * 全角文字は対応していません。<br>
   *appendixには半角文字1文字しか指定できません。<br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data    対象文字列
   * @param  appendix  挿入文字
   * @param  digit    指定桁数
   * @return  result    変換結果文字
   */
  public static String cnvHalfString(String data, String appendix,intdigit){
   
    // 対象文字列 null チェック
    if(isNull(data))
      return null;
   
    // 挿入文字 null チェック
    if(isNull(appendix))
      return null;
   
    // 挿入文字 空チェック
    if(appendix.length() == 0)
      return null;
   
    // 挿入文字 サイズチェック
    if(appendix.length() != 1)
      return null;
   
    // 対象文字列 半角文字チェック
    if(data.length() != 0)
      if(!isHalfChar(data, true))
        return null;
   
    // 挿入文字 半角文字チェック
    if(!isHalfChar(appendix, true))
      return null;
   
    // data を StringBuffer に変換
    StringBuffer after = new StringBuffer(data);
   
    // ループ回数取得
    int loop = digit - data.length();
   
    // 挿入文字を指定された桁になるまで挿入
    for(int i = 0; i < loop; i++)
      after.insert(0, appendix);
   
    return after.toString();
  }
 
  /**
   * 文字列 data をゼロパディングします。<br>
   * <br>
   * 半角文字に対応しています。
   * 全角文字は対応していません。
   *マイナスの値や小数は対応していません。<br>
   * 引数が不正の場合 null を返します。<br>
   * 変換イメージ[before:100,digit:5 → return:00100]
   *
   * @param  data  変換前の文字列数値
   * @param  digit  桁数
   * @return  result  変換後の文字列数値
   */
  public static String cnvZeroPadding(String data, int digit){
   
    // 半角数字チェック
    if(!isHalfNumber(data, false, false))
      return null;
   
    // 渡された数値を StringBuffer に変換
    StringBuffer after = new StringBuffer(data);
   
    // 渡された数値の桁数と要求された桁数を比較
    if(after.length() < digit){
     
      // 差分桁数
      int ins = digit - after.length();
     
      // 差分桁数分ループ
      for(int i = 0; i < ins; i++){
        // 数値(StringBuffer型)の頭に0を追加
        after.insert(0, UtilConstants.S_0);
      }
    }
   
    // String型に変換
    return after.toString();
  }
 
  /**
   * 文字列 data をゼロパディングします。<br>
   * <br>
   * 半角文字に対応しています。
   * 全角文字は対応していません。
   *マイナスの値や小数は対応していません。<br>
   * 引数が不正の場合 null を返します。<br>
   * 変換イメージ[before:100,digit:5 → return:00100]
   *
   * @param  data  変換前の文字列数値
   * @param  digit  桁数
   * @return  result  変換後の文字列数値
   */
  public static String cnvZeroPadding(int data, int digit){
    return cnvZeroPadding(String.valueOf(data), digit);
  }
 
  /**
   * 文字列 data をゼロサプレスします。<br>
   * <br>
   * 変換イメージ[before:00100 → return: 100]<br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data  変換前の文字列数値
   * @return  result  変換後の文字列数値
   */
  public static String cnvZeroSuppress(String data){
   
    // 半角数字チェック
    if(!isHalfNumber(data, true, true))
      return null;
   
    StringBuffer result = new StringBuffer();
   
    for(int i = 0; i < data.length(); i++){
      char c = data.charAt(i);
      if(c == UtilConstants.C_0){
        result.append(UtilConstants.S_HALF_SPACE);
      }else{
        result.append(data.substring(i, data.length()));
        break;
      }
    }
   
    // String型に変換
    return result.toString();
  }
 
  /**
   * 数値 data1 に数値 data2 を加算します。<br>
   * <br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data1  左項
   * @param  data2  右項
   * @return  result  計算結果
   */
  public static String cmpAddition(String data1, String data2){
   
    // null チェック
    if(isNull(data1) || isNull(data2))
      return null;
   
    // 数値チェック
    if(!isNumeric(data1) || !isNumeric(data2))
      return null;
   
    // BigDecimalに変換
    BigDecimal deci1 = new BigDecimal(data1);
    BigDecimal deci2 = new BigDecimal(data2);
   
    // 計算
    deci1 = deci1.add(deci2);
   
    return deci1.toString();
  }
 
  /**
   * 数値 data1 から数値 data2 を減算します。<br>
   * <br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data1  左項
   * @param  data2  右項
   * @return  result  計算結果
   */
  public static String cmpSubstract(String data1, String data2){
   
    // null チェック
    if(isNull(data1) || isNull(data2))
      return null;
   
    // 数値チェック
    if(!isNumeric(data1) || !isNumeric(data2))
      return null;
   
    // BigDecimalに変換
    BigDecimal deci1 = new BigDecimal(data1);
    BigDecimal deci2 = new BigDecimal(data2);
   
    // 計算
    deci1 = deci1.subtract(deci2);
   
    return deci1.toString();
  }
 
  /**
   * 数値 data1 を数値 data2 で乗算します。<br>
   * <br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data1  左項
   * @param  data2  右項
   * @return  result  計算結果
   */
  public static String cmpMultiply(String data1, String data2){
   
    // null チェック
    if(isNull(data1) || isNull(data2))
      return null;
   
    // 数値チェック
    if(!isNumeric(data1) || !isNumeric(data2))
      return null;
   
    // BigDecimalに変換
    BigDecimal deci1 = new BigDecimal(data1);
    BigDecimal deci2 = new BigDecimal(data2);
   
    // 計算
    deci1 = deci1.multiply(deci2);
   
    return deci1.toString();
  }
 
  /**
   * 数値 data1 を数値 data2 で除算します。<br>
   * <br>
   * scale で小数点以下桁数を指定できます。<br>
   * mode で端数処理の方法を選択できます。<br>
   * mode が1の場合は端数を切り上げます。(RoundUp)<br>
   * mode が2の場合は端数を四捨五入します。(RoundHalfUp)<br>
   * mode が3の場合は端数を切り捨てます。(RoundDown)<br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data1  左項
   * @param  data2  右項
   * @param  scale  小数点以下桁数
   * @param  mode  端数処理
   * @return  result  計算結果
   */
  public static String cmpDivide(String data1, String data2, int scale,intmode){
   
    // null チェック
    if(isNull(data1) || isNull(data2))
      return null;
   
    // data1 と data2 の数値チェック
    if(!isNumeric(data1) || !isNumeric(data2))
      return null;
   
    // 端数処理設定
    switch(mode){
      case 1:
        mode = BigDecimal.ROUND_UP;
        break;
      case 2:
        mode = BigDecimal.ROUND_HALF_UP;
        break;
      case 3:
        mode = BigDecimal.ROUND_DOWN;
        break;
      default:
        return null;
    }
   
    // BigDecimalに変換
    BigDecimal deci1 = new BigDecimal(data1);
    BigDecimal deci2 = new BigDecimal(data2);
   
    // 計算
    deci1 = deci1.divide(deci2, scale, mode);
   
    return deci1.toString();
  }

  /**
   * 文字列dataが全角文字で構成されているか検査します。<br>
   * <br>
   * @param  item    対象の文字列
   * @return result   チェック結果
   *   */
  // 全角入力チェック
  public static boolean fullSizeCheck(String item) {

    byte[] bytes;
    String encode = "MS932";

    try {
      bytes = item.getBytes(encode);

      int beams = item.length() * 2;

      StringBuffer sb = new StringBuffer(item);

      for (int i = 0; i < item.length(); i++) {
        if (' ' == sb.charAt(i)) {
          beams = beams - 2;
        }
      }

      if (beams != bytes.length) {
        return false;
      }
    } catch (UnsupportedEncodingException uee) {
      uee.printStackTrace();
    }
    return true;
  }
 
  /**
   * 文字列 data に挿入文字 appendix を指定桁数digitになるまで追加します。<br>
   * <br>
   * 全角文字に対応しています。<br>
   * 半角文字は対応していません。<br>
   *appendixには半角文字1文字しか指定できません。<br>
   * 引数が不正の場合は null を返します。<br>
   * <br>
   * @param  data    対象文字列
   * @param  appendix  挿入文字
   * @param  digit    指定桁数
   * @return  result    変換結果文字
   */
  public static String cnvFullString(String data, String appendix, intdigit){
   
    // 対象文字列 null チェック
    if(isNull(data))
      return null;
   
    // 挿入文字 null チェック
    if(isNull(appendix))
      return null;
   
    // 挿入文字 空チェック
    if(appendix.length() == 0)
      return null;
   
    // 挿入文字 サイズチェック
    if(appendix.length() != 1)
      return null;
   
    // 対象文字列 半角文字チェック
    if(data.length() != 0)
      if(!fullSizeCheck(data))
        return null;
   
    // 挿入文字 半角文字チェック
    if(!fullSizeCheck(appendix))
      return null;
   
    // data を StringBuffer に変換
    StringBuffer after = new StringBuffer(data);
   
    // ループ回数取得
    int loop = digit - data.length();
   
    // 挿入文字を指定された桁になるまで挿入
    for(int i = 0; i < loop; i++)
      after.append(appendix);
   
    return after.toString();   
  }

  /**
   * 文字列 mainStr 内の From の文字をToの文字に置換し<br>
   * 値を返す
   * <br>
   * @param  mailStr    変換対象の文字列
   * @param  fromStr    置換対象文字
   * @param  toStr     置換後文字
   * @return retStr    変換後文字列
   *   */
  public static String changeString(String mainStr,
                    String fromStr,
                    String toStr) {
    StringBuffer retStr = new StringBuffer();
    for (int i=0;i<mainStr.length();i++){
      if (mainStr.substring(i, i+1).equals(fromStr)) {
        retStr.append(toStr);
      } else {
        retStr.append(mainStr.substring(i, i+1));
      }
    }
    return retStr.toString();
  }

  /**
   * 入力文字列に指定文字列を付ける。
   * <br>
   * 例> 入力文字列 : "abc", 指定文字列: "1",カウント:3,位置:0
   *   ===> 結果文字列: "111abc"
   * @param  source  入力文字列
   * @param  fillStr  指定文字列
   * @param  count   付けるカウント
   * @param  position 付ける位置 (0:前, 0の以外:後)
   * @return target  結果文字列
   */
  public static String addStringNolimited (String source,
                       StringfillStr,
                       intcount,
                       intposition) {
    // 入力データをチェックする。
    if (source == null
    || fillStr == null
    || count <= 0
    || position < 0) {
      return source;
    }
    String target = null;
    StringBuffer buf = new StringBuffer();

    for (int i = 0; i < count; i++) {
      buf.append(fillStr);
    }
    if (position == 0) {
      target = buf.toString() + source;
    } else {
      target = source + buf.toString();
    }
    return target;
  }

  /**
  *入力文字列に指定した長さと同じように、指定文字列を付ける。
   * <br>
   * 例> 入力文字列 : "abc", 指定文字列: "1",全体長さ:5,位置:0
   *   ===> 結果文字列: "11abc"
   * @param  source    入力文字列
   * @param  fillStr   指定文字列
   * @param  totalLength 全体長さ
   * @param  position   付ける位置 (0:前, 0の以外:後)
   * @return target    結果文字列
   */
  public static String addStringLimited (String source,
                      StringfillStr,
                      inttotalLength,
                       intposition){
    // 入力データチェックする。
    if (source == null
    || fillStr == null
    || totalLength <= 0
    || position < 0) {
      return source;
    }
    if (source.length() >= totalLength) {
      return source;
    }
    int count = 0;
    String target = null;
    StringBuffer buf = new StringBuffer();

    count = totalLength - source.length();
    for (int i = 0; i < count; i++) {
      buf.append(fillStr);
    }
    if (position == 0) {
      target = buf.toString() + source;
    } else {
      target = source + buf.toString();
    }
    return target;
  }
 
  /**
   * 対処文字列の長さを得る。
   * <br>
   * 例> 対処文字列 : "ab学校c"
   *   ===> 文字列の長さ: 7
   * @param  str 対処文字列
   * @return len 文字列の長さ
   */ 
  public static int getStrLenZenHan(String str) {
    // nullをチェックする。
    if (isNull(str)) {
      return 0;
    }
   
    char[] chars = str.toCharArray( );
    int len = 0;
    int length = chars.length;

    for (int i = 0; i < length; i++) {
      // 範囲に入っていない場合は false
      if ( chars[i] != UtilConstants.C_HALF_SPACE
      &&!(UtilConstants.C_HALF_NUMBER_AND_ALPHABET_START<= chars[i]
      &&  chars[i]<=UtilConstants.C_HALF_NUMBER_AND_ALPHABET_END)
      && !(UtilConstants.C_HALF_KATAKANA_START<=chars[i]
      &&  chars[i] <=UtilConstants.C_HALF_KATAKANA_END)){ // 全角
        len += 2;
      } else { // 半角
        len += 1;
      }
    }  // end of for loop

    return len;
  }
 
  /**
   *数値全角→半角、半角→全角に変換する。<br>
   * "1" : 半角→全角<br>
   * "2" : 全角→半角<br>
   * <br>
   * @param type  フラグ
   * @return str  変換対象の文字列
   */
  public static String cnvNumberZenHan(int type, String str) {
    StringBuffer sb = new StringBuffer();
   
    if (str ==null
    || str.length() == 0
    || (type != 1 && type != 2)) {
      return str;
    }
   
    int chr;
    for (int count = 0; count < str.length(); count++) {
      chr = str.charAt(count);
      if (type == 1) {
        chr = chr + 65248;
      } else if (type == 2){
        chr = chr - 65248;
     
      }
      sb.append((char)chr);
    }

    return sb.toString();
  }
 
  /**
   * <br>
   * @param str     String
   * @param startIndex int
   * @param endIndex  int
   * @return ret  変換対象の文字列
   */
  
  public static String substringB(String str, int startIndex, intendIndex){
   
    int index = 0;
    String work = "";
    String ret = "";
   
    for (int i = 0; i < str.length(); i++) {
      work = str.substring(i, i + 1);
      index = index + work.getBytes().length;
      if (index > startIndex && index <= endIndex){
        ret = ret + work;
      } else if (index >= endIndex) {
        break;
      }
    }
    return ret;
  }
}

「共通関数」をウィキ内検索
LINE
シェア
Tweet
wiki @Wiki
記事メニュー
メニュー
  • トップページ
  • メニュー
    • java
    • 型変換
    • 日付
    • 共通関数
    • 技術者の心得
記事メニュー2
最近更新されたページ
  • 6829日前

    技術者の心得
  • 6829日前

    メニュー
  • 7015日前

    トップページ
  • 7015日前

    UtillView
  • 7016日前

    共通関数
  • 7016日前

    日付
  • 7016日前

    型変換
  • 7016日前

    java
もっと見る
最近更新されたページ
  • 6829日前

    技術者の心得
  • 6829日前

    メニュー
  • 7015日前

    トップページ
  • 7015日前

    UtillView
  • 7016日前

    共通関数
  • 7016日前

    日付
  • 7016日前

    型変換
  • 7016日前

    java
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. ソードランページ @ 非公式wiki
  6. ヒカマーWiki
  7. AviUtl2のWiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. Dark War Survival攻略
  10. 2025.3.15 小田急線運用表
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. 初音ミク Wiki
  6. 検索してはいけない言葉 @ ウィキ
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 発車メロディーwiki
  9. 英傑大戦wiki
  10. モンスター烈伝オレカバトル2@wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  3. べりはぴ - ストグラ まとめ @ウィキ
  4. おくら - クッキー☆解説Wiki
  5. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  6. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  7. 危険度7 - 検索してはいけない言葉 @ ウィキ
  8. 868 - ストグラ まとめ @ウィキ
  9. ガンダム・エアリアル(改修型) - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  10. ミッション攻略 - 地球防衛軍6 @ ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.