xufei 2 år sedan
förälder
incheckning
386c5a8b24

+ 24 - 0
src/main/java/com/winhc/bigdata/udf/StringCleanupV2.java

@@ -0,0 +1,24 @@
+package com.winhc.bigdata.udf;
+
+import com.aliyun.odps.udf.UDF;
+import com.aliyun.odps.utils.StringUtils;
+
+import java.util.regex.Pattern;
+
+/**
+ * @Author: π
+ * @Date: 2020/5/14 16:26
+ * @Description: 字符串去符号
+ */
+public class StringCleanupV2 extends UDF {
+    private static final Pattern pattern = Pattern.compile("[^\\u4e00-\\u9fa5]");
+
+    public String evaluate(String val) {
+        return StringUtils.isNotBlank(val) ? pattern.matcher(val).replaceAll("") : "";
+    }
+
+    public static void main(String[] args) {
+        StringCleanupV2 j = new StringCleanupV2();
+        System.out.println(j.evaluate("123AFzxc詹三000)(.里"));
+    }
+}

+ 55 - 0
src/main/java/com/winhc/bigdata/udf/ToNum.java

@@ -0,0 +1,55 @@
+package com.winhc.bigdata.udf;
+
+import com.aliyun.odps.udf.UDF;
+import com.aliyun.odps.utils.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.regex.Pattern;
+
+/**
+ * @Author: π
+ * @Date: 2020/5/14 16:26
+ * @Description: 字符串去符号
+ */
+public class ToNum extends UDF {
+    private static final Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5]");
+
+    public Double evaluate(String val,Integer len) {
+        if (StringUtils.isBlank(val)) return null;
+        String num = pattern.matcher(val).replaceAll("");
+        try {
+            return round(num, "1", len);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
+     * 进行四舍五入操作 -并保留指定位数
+     *
+     * @param @param  d1		处理数据
+     * @param @param  d2		如果为1 则自己保留多少位,100为除以100之后的结果再保留位数
+     * @param @param  len  小数点保留位数
+     * @param @return 参数
+     * @return String    返回类型
+     * @throws
+     * @Title: round
+     * @Description:
+     */
+    public static double round(String d1, String d2, Integer len) {
+        BigDecimal b1 = new BigDecimal(d1);
+        BigDecimal b2 = new BigDecimal(d2);
+        // 任何一个数字除以1都是原数字
+        // ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入的操作
+        double res = b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
+        return res;
+    }
+
+    public static void main(String[] args) {
+        ToNum j = new ToNum();
+        System.out.println(j.evaluate("9000.703624001万人民币",6));
+        System.out.println(j.evaluate("0.001000",6));
+        System.out.println(j.evaluate("企业选择不公示",6));
+        System.out.println(j.evaluate("0万元",6));
+    }
+}