0

Javaで領域変換プログラムのUdf関数を作成しています。次のデータがあります。

230Sq.feet
110Sq.yards
8Acres
123Sq.Ft

上記のデータを次のように分割します。

230 Sq.feet
990 Sq.feet
344 Sq.feet
123 Sq.feet

次のコードを試しました:

public class Areaconversion2 extends EvalFunc<String> {

public String determine_Area (String input) throws IOException
{
    String[] AreaArr = input.split("");
    Double Area;

    if(AreaArr[1].equalsIgnoreCase("Sq.Yards") || AreaArr[1].equalsIgnoreCase("Sq.Yds")) 
    {
    Area = Double.parseDouble(AreaArr[0]);
        Area = Area * 9;
        String Ar = Area.toString() + " Sq.Feet";
        return Ar;
    }
else if(AreaArr[1].equalsIgnoreCase("Acre") || AreaArr[1].equalsIgnoreCase("Acres")) 
{      
        Area = Double.parseDouble(AreaArr[0]);
        Area = Area * 43560;
        String Ar = Area.toString() + " Sq.Feet";
    return Ar;
 }
else if(AreaArr[1].equalsIgnoreCase("Sq.Feet)")||AreaArr[1].equalsIgnoreCase("Sq.Ft"));
      {
          Area = Double.parseDouble(AreaArr[0]); 
       String Ar = Area.toString() + " Sq.Feet";
          return Ar;
      }

    }

public String exec(Tuple input) throws IOException {
    // TODO Auto-generated method stub
     if (input == null || input.size() == 0)
         return null;

     try

     {

         String str = (String)input.get(0);

         return determine_Area(str);
         }catch(Exception e){
              throw new IOException("Caught exception processing input row ", e);
         }
}

}

処理中にのみ例外が発生しました。どんな助けでも大歓迎です。

4

2 に答える 2

0

先読み/後読みマッチングを使用できます。

String[] fields = str.split("(?<=\\d)(?=[A-Z])");

(?<=\\d)、「数字が前になければならない」ことを(?=[A-Z])意味する長さゼロのマッチャーであり、「一致した文字列の後に大文字がなければならない」ことを意味する長さゼロのマッチャーです。

あなたのデータでテストされました:

public static void main(String[] args) {
    String[] inputs = {"230Sq.feet", "110Sq.yards", "8Acres", "123Sq.Ft"};
    for(String input : inputs) {
        String[] fields = input.split("(?<=\\d)(?=[A-Z])");
        System.out.println(fields[0]+" "+fields[1]);
    }
}

出力は次のとおりです。

230 Sq.feet
110 Sq.yards
8 Acres
123 Sq.Ft
于 2015-05-19T06:49:57.223 に答える