java常用数据类型转换工具类

public class DataConvertUtils {

   
  /**
   *将16进制数转换为byte数组
   */
    public static byte[] hex2Byte(String hex) {
        String[] parts = hex.split(" ");
        byte[] bytes = new byte[parts.length];
        for (int i = 0; i < parts.length; i++) {
            bytes[i] = (byte) Integer.parseInt(parts[i], 16);
        }
        return bytes;
    }


  /**
   *将byte数组转换为16进制数
   */
    public static final char[] HEX = "0123456789ABCDEF".toCharArray();
    public static String bytesToHex(byte[] bytes, int length) {
        char[] hexChars = new char[bytes.length * 2];
        for (int j = 0; j < Math.min(length, bytes.length); j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = HEX[v >>> 4];
            hexChars[j * 2 + 1] = HEX[v & 0x0F];
        }
        return new String(hexChars);
    }


   
  /**
   *随机产生一组16进制数
   */
    public static String randomHexString(int length) {
        StringBuffer result = new StringBuffer();
        Random random = new Random();
        try {
            for (int i = 0; i < length; i++) {
                String hexString = Integer.toHexString(random.nextInt(255));
                if (hexString.length() == 1) {
                    result.append("0");
                }
                result.append(hexString).append(" ");
            }
            return result.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


   /**
    * 把字串转化为整数,若转化失败,则返回0
    *
    * @param str 字符串
    * @return
    */
   public static int strToInt(String str) {
      if (str == null) {
         return 0;
      }

      try {
         return Integer.parseInt(str);
      } catch (Exception ex) {
         ex.printStackTrace();
         System.err.println(str + "转换成int类型失败,请检查数据来源");
      }
      return 0;
   }

   /**
    * 把字串转化为长整型数,若转化失败,则返回0
    *
    * @param str
    * @return
    */
   public static long strToLong(String str) {
      if (str == null) {
         return 0;
      }

      try {
         return Long.parseLong(str);
      } catch (Exception ex) {
         ex.printStackTrace();
         System.err.println(str + "转换成long类型失败,请检查数据来源");
      }
      return 0;
   }

   /**
    * 把字串转化为Float型数据,若转化失败,则返回0
    *
    * @param str
    * @return
    */
   public static float strToFloat(String str) {
      if (str == null) {
         return 0;
      }
      try {
         return Float.parseFloat(str);
      } catch (Exception ex) {
         ex.printStackTrace();
         System.err.println(str + "转换成float类型失败,请检查数据来源");
      }
      return 0;
   }

   /**
    * 把字串转化为Double型数据,若转化失败,则返回0
    * 
    * @param str
    * @return
    */
   public static double strToDouble(String str) {
      if (str == null) {
         return 0;
      }
      try {
         return Double.parseDouble(str);
      } catch (Exception ex) {
         ex.printStackTrace();
         System.err.println(str + "转换成double类型失败,请检查数据来源");
      }
      return 0;
   }

   /**
    * 描述:字符转为一个元素的Object数组
    * 
    * @param str
    * @return
    */
   public static Object[] strToArry(String str) {
      if (str == null) {
         return null;
      } else {
         return new Object[] { str };
      }
   }

   /**
    * 对于一个字符串数组,把字符串数组中的每一个字串转换为整数。
    * 返回一个转换后的整型数组,对于每一个字串若转换失败,则对 应的整型值就为0
    *
    * @param strArray
    * @return
    */
   public static int[] strArrayToIntArray(String[] strArray) {
      int[] intArray = new int[strArray.length];
      for (int i = 0; i < strArray.length; i++) {
         intArray[i] = strToInt(strArray[i]);
      }
      return intArray;
   }

   /**
    * 描述:数组转换为字符串
    * 
    * @param arg0
    * @return
    */
   public static String arrToString(Object[] arg0) {
      if (arg0 == null) {
         return "";
      }
      return arrToString(arg0, ",");
   }

   /**
    * 描述:数据转换为字符串
    * 
    * @param arg0 数组
    * @param arg1 取数组个数
    * @return
    */
   public static String arrToString(Object[] arg0, int arg1) {
      if (arg0 == null) {
         return "";
      }
      return arrToString(arg0, ",", arg1);
   }

   /**
    * 描述:数据转换为字符串
    * 
    * @param arg0 数组
    * @param arg1 间隔符号
    * @return
    */
   public static String arrToString(Object[] arg0, String arg1) {
      return arrToString(arg0, arg1, 0);
   }

   /**
    * 描述:数据转换为字符串
    * 
    * @param arg0 数组
    * @param arg1 间隔符号
    * @param arg2 取数组个数
    * @return
    */
   public static String arrToString(Object[] arg0, String arg1, int arg2) {
      if (arg0 == null || arg0.length == 0) {
         return "";
      } else {
         StringBuffer sb = new StringBuffer();
         int length = arg0.length;
         if (arg2 != 0) {
            length = arg2;
         }
         for (int i = 0; i < length; i++) {
            if (arg1 == null)
               arg1 = "";
            sb.append(arg0[i]).append(arg1);
         }
         sb.delete(sb.lastIndexOf(arg1), sb.length());
         return sb.toString();
      }
   }

   /**
    * 描述:List转换为字符串
    * 
    * @param list List数据
    * @param separation 间隔符
    * @return
    */
   public static String listToString(List<?> list) {
      return listToString(list, ",");
   }

   /**
    * 描述:List转换为字符串
    * 
    * @param list List数据
    * @param separation 间隔符
    * @return
    */
   public static String listToString(List<?> list, String separation) {
      return arrToString(listToStringArray(list), separation);
   }

   /**
    * 描述:字串数据元素包装
    * 
    * @param sArr 字串数据
    * @param pre 前缀
    * @param aft 后缀
    * @return
    */
   public static String[] strArrDoPack(String[] sArr, String pre, String aft) {
      return strArrDoPack(sArr, pre, aft, 1, 0);
   }

   /**
    * 描述:字串数据元素包装
    * 
    * @param sArr 字串数据
    * @param pre 前缀
    * @param aft 后缀
    * @param num 生成个数
    * @return
    */
   public static String[] strArrDoPack(String[] sArr, String pre, String aft, int num) {
      return strArrDoPack(sArr, pre, aft, num, 0);
   }

   /**
    * 描述:字串数据元素包装
    * 
    * @param sArr 字串数据
    * @param pre 前缀
    * @param aft 后缀
    * @param num 生成个数
    * @param step 数字值1:加,-1:减,0:不变
    * @return
    */
   public static String[] strArrDoPack(String[] sArr, String pre, String aft, int num, int step) {
      String[] arr = null;
      if (sArr != null) {
         boolean isAdd = false;
         if (step > 0) {
            isAdd = true;
         }

         if (num < 0) {
            num = 1;
         }

         arr = new String[sArr.length * num];
         int icount = 0;
         for (int i = 0; i < num; i++) {
            for (int j = 0; j < sArr.length; j++) {
               if (StringHelper.isNotEmpty(pre)) {
                  arr[icount] = pre + sArr[j];
               }
               if (StringHelper.isNotEmpty(aft)) {
                  arr[icount] += aft;
               }
               icount++;
            }

            boolean b = false;
            if (step != 0) {
               pre = stepNumInStr(pre, isAdd);
               b = true;
            }
            if (!b) {
               if (step != 0) {
                  aft = stepNumInStr(aft, isAdd);
               }
            }
         }

      }
      return arr;
   }

   /**
    * 描述:生成字符串
    * 
    * @param arg0 字符串元素
    * @param arg1 生成个数
    * @return
    */
   public static String createStr(String arg0, int arg1) {
      if (arg0 == null) {
         return "";
      }
      return createStr(arg0, arg1, ",");
   }

   /**
    * 描述:生成字符串
    * 
    * @param arg0 字符串元素
    * @param arg1 生成个数
    * @param arg2 间隔符号
    * @return
    */
   public static String createStr(String arg0, int arg1, String arg2) {
      if (arg0 == null) {
         return "";
      } else {
         StringBuffer sb = new StringBuffer();
         for (int i = 0; i < arg1; i++) {
            if (arg2 == null)
               arg2 = "";
            sb.append(arg0).append(arg2);
         }
         if (sb.length() > 0) {
            sb.delete(sb.lastIndexOf(arg2), sb.length());
         }

         return sb.toString();
      }
   }

   /**
    * 描述:生成字符串数据
    * 
    * @param arg0 字符串元素
    * @param arg1 生成个数
    * @return
    */
   public static String[] createStrArr(String arg0, int arg1) {
      if (arg0 == null) {
         return null;
      } else {
         String[] arr = new String[arg1];
         for (int i = 0; i < arg1; i++) {
            arr[i] = arg0;
         }

         return arr;
      }
   }

   /**
    * 描述:只保留字符串的英文字母和“_”号
    * 
    * @param str
    * @return
    */
   public static String replaceAllSign(String str) {
      if (str != null && str.length() > 0) {
         str = str.replaceAll("[^a-zA-Z_]", "");
      }
      return str;
   }

   /**
    * 描述:字串中的数字值加1
    * 
    * @param str 字串
    * @param isAdd 数字值true:加,false:减
    * @return
    */
   public static String stepNumInStr(String str, boolean isAdd) {
      String sNum = str.replaceAll("[^0-9]", ",").trim();
      if (sNum == null || sNum.length() == 0) {
         return str;
      }
      String[] sNumArr = sNum.split(",");

      for (int i = 0; i < sNumArr.length; i++) {
         if (sNumArr[i] != null && sNumArr[i].length() > 0) {
            int itemp = Integer.parseInt(sNumArr[i]);
            if (isAdd) {
               itemp += 1;
            } else {
               itemp -= 1;
            }
            str = str.replaceFirst(sNumArr[i], String.valueOf(itemp));
            break;
         }
      }

      return str;
   }

   /**
    * 描述:list 转换为 String[]
    * 
    * @param list
    * @return
    */
   public static String[] listToStringArray(List<?> list) {
      if (list == null || list.size() == 0) {
         return null;
      }
      return (String[]) list.toArray(new String[list.size()]);
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JAVA开发人员必备是HTML格式的 JavaTM 2 Platform Standard Edition 6 API 规范 本文档是 Java 2 Platform Standard Edition 6.0 的 API 规范。 请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的各类事件的接口和类。 java.awt.font 提供与字体相关的类和接口。 java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口。 java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,即基于 JavaBeansTM 架构的组件。 java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的选择器。 java.nio.channels.spi 用于 java.nio.channels 包的服务提供者类。 java.nio.charset 定义用来在字节和 Unicode 字符之间转换的 charset、解码器和编码器。 java.nio.charset.spi java.nio.charset 包的服务提供者类。 java.rmi 提供 RMI 包。 java.rmi.activation 为 RMI 对象激活提供支持。 java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security 包中的类取代。 java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)密钥。 java.security.spec 提供密钥规范和算法参数规范的类和接口。 java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户界面组件与提供对这些组件进行访问的辅助技术之间的协定。 javax.crypto 为加密操作提供类和接口。 javax.crypto.interfaces 根据 RSA Laboratories' PKCS #3 的定义,提供 Diffie-Hellman 密钥接口。 javax.crypto.spec 为密钥规范和算法参数规范提供类和接口。 javax.imageio Java Image I/O API 的主要包。 javax.imageio.event Java Image I/O API 的一个包,用于在读取和写入图像期间处理事件的同步通知。 javax.imageio.metadata 用于处理读写元数据Java Image I/O API 的包。 javax.imageio.plugins.bmp 包含供内置 BMP 插件使用的公共类的包。 javax.imageio.plugins.jpeg 支持内置 JPEG 插件的类。 javax.imageio.spi 包含用于 reader、writer、transcoder 和流的插件接口以及一个运行时注册表的 Java Image I/O API 包。 javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类。 javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management.relation 提供 Relation Service 的定义。 javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax.naming 为访问命名服务提供类和接口。 javax.naming.directory 扩展 javax.naming 包以提供访问目录服务的功能。 javax.naming.event 在访问命名和目录服务时提供对事件通知的支持。 javax.naming.ldap 提供对 LDAPv3 扩展操作和控件的支持。 javax.naming.spi 提供一些方法来动态地插入对通过 javax.naming 和相关包访问命名和目录服务的支持。 javax.net 提供用于网络应用程序的类。 javax.net.ssl 提供用于安全套接字包的类。 javax.print 为 JavaTM Print Service API 提供了主要类和接口。 javax.print.attribute 提供了描述 JavaTM Print Service 属性的类型以及如何分类这些属性的类和接口。 javax.print.attribute.standard 包 javax.print.attribute.standard 包括特定打印属性的类。 javax.print.event 包 javax.print.event 包含事件类和侦听器接口。 javax.rmi 包含 RMI-IIOP 的用户 API。 javax.rmi.CORBA 包含用于 RMI-IIOP 的可移植性 API。 javax.rmi.ssl 通过安全套接字层 (SSL) 或传输层安全 (TLS) 协议提供 RMIClientSocketFactory 和 RMIServerSocketFactory 的实现。 javax.security.auth 此包提供用于进行验证和授权的框架。 javax.security.auth.callback 此包提供与应用程序进行交互所必需的类,以便检索信息(例如,包括用户名和密码的验证数据)或显示信息(例如,错误和警告消息)。 javax.security.auth.kerberos 此包包含与 Kerberos 网络验证协议相关的实用工具类javax.security.auth.login 此包提供可插入的验证框架。 javax.security.auth.spi 此包提供用于实现可插入验证模块的接口。 javax.security.auth.x500 此包包含应该用来在 Subject 中存储 X500 Principal 和 X500 Private Crendentials 的类。 javax.security.cert 为公钥证书提供类。 javax.security.sasl 包含用于支持 SASL 的类和接口。 javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的接口。 javax.sound.sampled 提供用于捕获、处理和回放取样的音频数据的接口和类。 javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。 javax.sql.rowset JDBC RowSet 实现的标准接口和基类。 javax.sql.rowset.serial 提供实用工具类,允许 SQL 类型与 Java 编程语言数据类型之间的可序列化映射关系。 javax.sql.rowset.spi 第三方供应商在其同步提供者的实现中必须使用的标准类和接口。 javax.swing 提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。 javax.swing.border 提供围绕 Swing 组件绘制特殊边框的类和接口。 javax.swing.colorchooser 包含供 JColorChooser 组件使用的类和接口。 javax.swing.event 供 Swing 组件触发的事件使用。 javax.swing.filechooser 包含 JFileChooser 组件使用的类和接口。 javax.swing.plaf 提供一个接口和许多抽象类,Swing 用它们来提供自己的可插入外观功能。 javax.swing.plaf.basic 提供了根据基本外观构建的用户界面对象。 javax.swing.plaf.metal 提供根据 Java 外观(曾经代称为 Metal)构建的用户界面对象,Java 外观是默认外观。 javax.swing.plaf.multi 提供了组合两个或多个外观的用户界面对象。 javax.swing.plaf.synth Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。 javax.swing.table 提供用于处理 javax.swing.JTable 的类和接口。 javax.swing.text 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html.parser 提供默认的 HTML 解析器以及支持类。 javax.swing.text.rtf 提供一个类 (RTFEditorKit),用于创建富文本格式(Rich-Text-Format)的文本编辑器。 javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释。 javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的部分默认实现。 javax.xml.bind.util 有用的客户端实用工具类javax.xml.crypto 用于 XML 加密的通用类。 javax.xml.crypto.dom javax.xml.crypto 包的特定于 DOM 的类。 javax.xml.crypto.dsig 用于生成和验证 XML 数字签名的类。 javax.xml.crypto.dsig.dom javax.xml.crypto.dsig 包特定于 DOM 的类。 javax.xml.crypto.dsig.keyinfo 用来解析和处理 KeyInfo 元素和结构的类。 javax.xml.crypto.dsig.spec XML 数字签名的参数类。 javax.xml.datatype XML/Java 类型映射关系。 javax.xml.namespace XML 名称空间处理。 javax.xml.parsers 提供允许处理 XML 文档的类。 javax.xml.soap 提供用于创建和构建 SOAP 消息的 API。 javax.xml.stream javax.xml.stream.events javax.xml.stream.util javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 javax.xml.transform.stax 提供特定于 StAX 的转换 API。 javax.xml.transform.stream 此包实现特定于流和 URI 的转换 API。 javax.xml.validation 此包提供了用于 XML 文档验证的 API。 javax.xml.ws 此包包含核心 JAX-WS API。 javax.xml.ws.handler 该包定义用于消息处理程序的 API。 javax.xml.ws.handler.soap 该包定义用于 SOAP 消息处理程序的 API。 javax.xml.ws.http 该包定义特定于 HTTP 绑定的 API。 javax.xml.ws.soap 该包定义特定于 SOAP 绑定的 API。 javax.xml.ws.spi 该包定义用于 JAX-WS 2.0 的 SPI。 javax.xml.xpath 此包提供了用于 XPath 表达式的计算和访问计算环境的 object-model neutral API。 org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 org.omg.CORBA 提供 OMG CORBA API 到 JavaTM 编程语言的映射,包括 ORB 类,如果已实现该类,则程序员可以使用此类作为全功能对象请求代理(Object Request Broker,ORB)。 org.omg.CORBA_2_3 CORBA_2_3 包定义对 Java[tm] Standard Edition 6 中现有 CORBA 接口所进行的添加。 org.omg.CORBA_2_3.portable 提供输入和输出值类型的各种方法,并包含 org/omg/CORBA/portable 包的其他更新。 org.omg.CORBA.DynAnyPackage 提供与 DynAny 接口一起使用的异常(InvalidValue、Invalid、InvalidSeq 和 TypeMismatch)。 org.omg.CORBA.ORBPackage 提供由 ORB.resolve_initial_references 方法抛出的异常 InvalidName,以及由 ORB 类中的动态 Any 创建方法抛出的异常 InconsistentTypeCode。 org.omg.CORBA.portable 提供可移植性层,即可以使一个供应商生成的代码运行在另一个供应商 ORB 上的 ORB API 集合。 org.omg.CORBA.TypeCodePackage 提供用户定义的异常 BadKind 和 Bounds,它们将由 TypeCode 类中的方法抛出。 org.omg.CosNaming 为 Java IDL 提供命名服务。 org.omg.CosNaming.NamingContextExtPackage 此包包含以下在 org.omg.CosNaming.NamingContextExt 中使用的类: AddressHelper StringNameHelper URLStringHelper InvalidAddress 包规范 有关 Java[tm] Platform, Standard Edition 6 ORB 遵守的官方规范的受支持部分的明确列表,请参阅 Official Specifications for CORBA support in Java[tm] SE 6。 org.omg.CosNaming.NamingContextPackage 此包包含 org.omg.CosNaming 包的 Exception 类。 org.omg.Dynamic 此包包含 OMG Portable Interceptor 规范 http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06 的第 21.9 小节中指定的 Dynamic 模块。 org.omg.DynamicAny 提供一些类和接口使得在运行时能够遍历与 any 有关联的数据值,并提取数据值的基本成分。 org.omg.DynamicAny.DynAnyFactoryPackage 此包包含 DynamicAny 模块的 DynAnyFactory 接口中的类和异常,该模块在 OMG The Common Object Request Broker: Architecture and Specification http://cgi.omg.org/cgi-bin/doc?formal/99-10-07 的第 9.2.2 小节中指定。 org.omg.DynamicAny.DynAnyPackage 此包包含 DynAny 模块的 DynAnyFactory 接口中的类和异常,该模块在 OMG The Common Object Request Broker: Architecture and Specification http://cgi.omg.org/cgi-bin/doc?formal/99-10-07 的第 9.2 小节中指定。 org.omg.IOP 此包包含在 OMG 文档 The Common Object Request Broker: Architecture and Specification http://cgi.omg.org/cgi-bin/doc?formal/99-10-07 的 13.6.小节中指定的 IOP 模块。 org.omg.IOP.CodecFactoryPackage 此包包含 IOP::CodeFactory 接口中指定的异常(作为 Portable Interceptor 规范的一部分)。 org.omg.IOP.CodecPackage 此包根据 IOP::Codec IDL 接口定义生成。 org.omg.Messaging 此包包含 OMG Messaging Interceptor 规范 http://cgi.omg.org/cgi-bin/doc?formal/99-10-07 中指定的 Messaging 模块。 org.omg.PortableInterceptor 提供一个注册 ORB 钩子 (hook) 的机制,通过这些钩子 ORB 服务可以截取执行 ORB 的正常流。 org.omg.PortableInterceptor.ORBInitInfoPackage 此包包含 OMG Portable Interceptor 规范 http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06 的第 21.7.2 小节中指定的 PortableInterceptor 模块的 ORBInitInfo 本地接口中的异常和 typedef。 org.omg.PortableServer 提供一些类和接口,用来生成跨多个供应商 ORB 的可移植应用程序的服务器端。 org.omg.PortableServer.CurrentPackage 提供各种方法实现,这些实现能够访问调用方法的对象的身份。 org.omg.PortableServer.POAManagerPackage 封装 POA 关联的处理状态。 org.omg.PortableServer.POAPackage 允许程序员构造可在不同 ORB 产品间移植的对象实现。 org.omg.PortableServer.portable 提供一些类和接口,用来生成跨多个供应商 ORB 的可移植应用程序的服务器端。 org.omg.PortableServer.ServantLocatorPackage 提供定位 servant 的类和接口。 org.omg.SendingContext 为值类型的编组提供支持。 org.omg.stub.java.rmi 包含用于 java.rmi 包中出现的 Remote 类型的 RMI-IIOP Stub。 org.w3c.dom 为文档对象模型 (DOM) 提供接口,该模型是 Java API for XML Processing 的组件 API。 org.w3c.dom.bootstrap org.w3c.dom.events org.w3c.dom.ls org.xml.sax 此包提供了核心 SAX API。 org.xml.sax.ext 此包包含适合的 SAX 驱动程序不一定支持的 SAX2 设施的接口。 org.xml.sax.helpers 此包包含“帮助器”类,其中包括对引导基于 SAX 的应用程序的支持。
1. Java工具概述 很多人初学程序时,总是在想,那么多的算法该怎么写呀?那么多的数据结构都不熟悉,该怎么实现呀?总是担心英语不好程序学不精通,数学不好写程序无法达到巅峰。学的程序越多,不懂的知识越多。 这种想法很正常,毕竟传统的计算机教育都是从原理开始的,科学原理一般理解起来还能够接受,但是实现起来都很难。计算机发展到了今天,能成为原理的基本已经有人实现了,今天我们学习任何知识都是站在巨人的肩膀上,只要理解程序运行原理,算法的功能即可。底层的各种算法,各种数据结构已经被“巨人们”实现了,一般都放在程序开发类库中,程序员开发过程中直接调用即可。 比如现在木工做家具,已经不存在自己砍树、加工木板、一点一点的雕刻了,如果需要木板,直接到市场上购买,需要各种图案,直接到市场购买,木工的工作就是把这些木板修理一下组装成一套家具即可。“工欲善其事,必先利其器”,在Java程序开发过程中,很多算法(比如:MD5加密算法)、很多数据结构(比如链表LinkedList)已经实现并且大多放在类库的java.util包中,程序员只需要了解各种工具的功能就可以直接调用。比如对一个数组进行排序,程序员可以写如下排序算法: 代码演示:数组排序 public static void sort(int[] arrs) { boolean isSwap = false; for (int i = 0; i < arrs.length - 1; i++) { isSwap = false; for (int j = arrs.length - 1; j > i; j--) { if (arrs[j - 1] > arrs[j]) { isSwap = true; int tmp = arrs[j - 1]; arrs[j - 1] = arrs[j]; arrs[j] = tmp; } } } } 该排序算法中只能对整数数组排序,还有其他数据类型呢?就需要重载很多方法进行排序操作。而在Java类库中有一个Arrays类的sort方法已经实现各种数据类型的排序算法。程序员只需要调用该类的方法即可。 代码演示:Arrays实现排序 public static void main(String[] args) { int[] ages={23, 45,12,76,34,56,24}; Arrays.sort(ages); for (int i = 0; i < ages.length; i++) { System.out.println(ages[i]); } } 在Java开发类库中,提供了很多工具类,我们即将学习最常见的工具类,比如对日期的操作,对集合的操作等。具体更多的工具类,请参考JavaDoc文档。 2. java.util.Date类 Date类包装了毫秒值,毫秒值表示自1970年1月1日00:00:00 GMT开始到现在经过的毫秒数。该类的大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类的另一个主要功能是,在数据库操作中,它允许将毫秒值表示为SQL DATE值,是数据库操作中java.sql.Date的父类。关于数据库操作,将在第八章开始讲解。 该类目前推荐使用的构造方法有两个: 构造方法 说明 Date() 按照当前系统时间构造一个Date对象。 Date(long date) 按照给定的时间毫秒值构造一个 Date 对象。 表1 java.util.Date类的构造方法 主要的方法有: 返回 异常 说明 boolean after(Date when) 测试当前对象表示的时间是否在指定时间之后。 boolean before(Date when) 测试当前对象表示的时间是否在指定时间之前。 long getTime() 返回当前对象对应的时间毫秒值 void setTime(long time) 设置时间 表2 java.util.Date类的主要方法 代码演示:时间设置 public class Demo2 { public static void main(String[] args) { Date date=new Date(); ① date.setTime((10L*365+2)*24*60*60*1000); ② System.out.println(date); ③ } } 代码解析: ① 构造当前系统时间。 ② 设置时间值为1970年后10年的时间的毫秒值,10年间有2个闰年,10年的天数是:10*365+2,10L表示当前值是long类型。 ③ 调用Date的toString方法输出结果。 代码输出结果: Tue Jan 01 08:00:00 CST 1980 Q 老师,时间毫秒值从1970年1月1日0:00.000开始计算,上面示例中10年后应该是1980年1月1日0:00.000,为什么输出结果是:1980年1月1日 8:00呢? A java.util.Date类型表示的是GMT时间,本身输出是国际化输出,由于中国处于东八区时间,因此输出结果是早上8点。而Date的其他构造方法和普通方法的API都不容易实现国际化,因此目前Date类的大多数方法都被标识为过时,表示更灵活的时间类请参考java.util.Calendar。 Date的输出结果是按照国际通用格式输出的,而中国更习惯于“年-月-日”的形式输出,这种特殊格式的输出需要用到Java格式化工具。 3. 格式化工具 格式化的目的是把一个对象以不同的格式表示,以满足不同环境对格式的要求,比如:前面学习的Date对象实质是一个以毫秒值表示的时间,但是在不同的国家和地区表示方式不一样。那么就需要对Date进行格式化处理。接下来主要学习Java对日期时间的格式化和对数字的格式化处理。  日期时间格式化 Date类中包含了日期和时间,在Java编程中,日期通常指年、月、日,时间则指时、分、秒、毫秒。Java对Date进行格式化使用java.text.DateFormat类。在格式表示中,经常采用4种格式,这四种格式被定义为DateFormat类的常量。下表所示: 格式 说明 SHORT 以最短的格式表示,比如:09-8-20 MEDIUM 比short完整表示方式,比如:2009-8-20 LONG 比medium更完整的表示方式,比如:2009年8月20日 FULL 综合的表示方式,比如:2009年8月20日 星期四 表3 DateFormat的四种表示格式 因为不同国家地区需要格式化的结果不同,Locale类的对象表示了不同的区域,Locale定义目前全世界几乎所有地区的对象表示,比如: 格式 说明 Locale.CHINA 中国地区 Locale.US 美国地区 Locale.FRANCE 法国地区 Locale.CANADA 加拿大地区 表4 Locale对部分地区的表示 DateFormat是一个抽象类,不能直接实例化,可以使用下表中的静态方法得到DateFormat的对象。 方法 说明 getDateInstance() 返回默认地区,默认格式的关于日期的DateFormat对象。 getDateInstance(int) 返回指定格式下,默认地区的关于日期的DateFormat对象。 getDateInstance(int, Locale) 返回指定格式,指定地区的关于日期的DateFormat对象。 getTimeInstance() 返回默认地区,默认格式的关于时间的DateFormat对象。 getTimeInstance (int) 返回默认地区,指定格式的关于时间的DateFormat对象。 getTimeInstance (int, Locale) 返回指定地区,指定格式的关于时间的DateFormat对象。 getDateTimeInstance() 返回默认地区、默认日期格式、默认时间格式的关于日期和时间的DateFormat对象。 getDateTimeInstance (int,int) 返回默认地区、指定日期格式、指定时间格式的关于日期和时间的DateFormat对象。 getDateTimeInstance (int,int, Locale) 返回指定地区、指定日期格式、指定时间格式的关于日期和时间的DateFormat对象。 表5 获取DateFormat对象的静态方法 调用DateFormat对象的format方法可以把Date对象转换成为指定格式的String类型数据。比如: Date today=new Date(); DateFormat df=DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA); String result=df.format(today); 代码演示:日期的不同格式 import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class Demo3 { public static void main(String[] args) { Date today = new Date(); Locale[] locals = new Locale[] { Locale.CHINA, Locale.US, Locale.UK }; for (int i = 0; i < locals.length; i++) { DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT, locals[i]); DateFormat df2 = DateFormat.getDateInstance(DateFormat.MEDIUM, locals[i]); DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG, locals[i]); DateFormat df4 = DateFormat.getDateInstance(DateFormat.FULL, locals[i]); System.out.println(locals[i].getDisplayCountry() + "的日期形式:"); System.out.println("\tShort格式:" + df1.format(today)); System.out.println("\tMedium格式:" + df2.format(today)); System.out.println("\tLong格式:" + df3.format(today)); System.out.println("\tFull格式:" + df4.format(today)); } } } 代码输出结果: 中国的日期形式: Short格式:09-8-20 Medium格式:2009-8-20 Long格式:2009年8月20日 Full格式:2009年8月20日 星期四 美国的日期形式: Short格式:8/20/09 Medium格式:Aug 20, 2009 Long格式:August 20, 2009 Full格式:Thursday, August 20, 2009 英国的日期形式: Short格式:20/08/09 Medium格式:20-Aug-2009 Long格式:20 August 2009 Full格式:20 August 2009 在Java程序设计过程中,对应日期和时间的格式化,还有一个简单的格式化方式,就是java.text.SimpleDateFormat,该类中用字符串指定日期和时间的格式,字符串中的字符称为模式字符,模式字符区分大小写。常见的模式字符定义如下: 字母 日期或时间元素 y 年 M 年中的月份 w 年中的周数 W 月份中的周数 D 年中的天数 d 月份中的天数 F 月份中的星期 E 星期中的天数 a Am/pm 标记 H 一天中的小时数(0-23) k 一天中的小时数(1-24) K am/pm 中的小时数(0-11) h am/pm 中的小时数(1-12) m 小时中的分钟数 s 分钟中的秒数 S 毫秒数 表6 模式字符串 例如: 日期和时间模式 结果 "EEE, MMM d, ''yy" Wed, Jul 4, '01 "h:mm a" 12:08 PM "yyyy-MM-dd HH:mm:ss" 2009-8-20 14:22 "yyyy年MM月dd HH:mm:ss" 2009年8月20 14:22:23 表7 模式字符串示例 SimpleDateFormat是DateFormat的子类,用法和DateFormat类基本一致,主要使用format()方法。 代码演示:SimpleDateFormat进行日期转换 import java.text.SimpleDateFormat; import java.util.Date; public class Demo4 { public static void main(String[] args) { Date today = new Date(); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format2 = new SimpleDateFormat("yyyy年MM月dd HH:mm:ss"); SimpleDateFormat format3 = new SimpleDateFormat("HH:mm:ss"); SimpleDateFormat format4 = new SimpleDateFormat("yyyy"); System.out.println(format1.format(today)); System.out.println(format2.format(today)); System.out.println(format3.format(today)); System.out.println(format4.format(today)); } } 代码输出结果: 2009-08-20 2009年08月20 14:25:58 14:25:58 2009 在程序设计时,界面上用户输入的基本上都是字符串,如果字符串输入一个出生年月,如何把该字符串转换成Date类型呢?可以使用SimpleDateFormat的parse()方法。 代码演示:SimpleDateFormat解析日期 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Demo5 { public static void main(String[] args) { String birthday="1980-04-16"; SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); try { Date bir=format.parse(birthday); System.out.println(bir); } catch (ParseException e) { ① // TODO Auto-generated catch block e.printStackTrace(); } } } 代码解析: ① 用SimpleDateFormat解析日期的时候需要处理其中的ParseException异常。  数字格式化 对数字的格式化,在程序处理中也是非常常用的,数字格式化主要对小数点位数,表示的形式(比如:百分数表示)等格式处理。 NumberFormat 是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。若要格式化当前Locale的数值,可使用其中一个方法: myString = NumberFormat.getInstance().format(myNumber); 若要格式化不同 Locale 的日期,可在调用getInstance方法时指定它。 NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH); 方法 说明 getInstance() 获取常规数值格式。可以指定Local参数。 getNumberInstance() 获取常规数值格式。可以指定Local参数。 getIntegerInstance() 获取整数数值格式。可以指定Local参数。 getCurrencyInstance () 获取货币数值格式。可以指定Local参数。格式化后的数据前面会有一个货币符号,比如:“¥” getPercentInstance() 获取显示百分比的格式。可以指定Local参数。比如:小数 0.53 将显示为 53%。 表8 获取NumberFormat对象 代码演示:NumberFormat进行数字格式化 import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Locale; public class Demo6 { public static void main(String[] args) { double mynum1 = 230456789; double mynum2 = 0.23; NumberFormat nf1 = NumberFormat.getInstance(Locale.CHINA); NumberFormat nf2 = NumberFormat.getCurrencyInstance(Locale.CHINA); NumberFormat nf3 = NumberFormat.getCurrencyInstance(Locale.US); NumberFormat nf4 = NumberFormat.getPercentInstance(); System.out.println(nf1.format(mynum1)); System.out.println(nf2.format(mynum1)); System.out.println(nf3.format(mynum1)); System.out.println(nf4.format(mynum2)); } } 代码输出结果: 230,456,789 ¥230,456,789.00 $230,456,789.00 23% 关于更复杂的数字格式化,可以使用java.text.DecimalFormat进行处理,该类通过模式字符串对数字格式化。 代码演示:DecimalFormat进行数字格式化 import java.text.DecimalFormat; public class Demo7 { public static void main(String[] args) { int num1=1234567; double num2=0.126543; DecimalFormat df1=new DecimalFormat("#,###"); ① DecimalFormat df2=new DecimalFormat("#.00"); ② DecimalFormat df3=new DecimalFormat("00.#"); ③ DecimalFormat df4=new DecimalFormat("0.##E0"); ④ DecimalFormat df5=new DecimalFormat("0.##%"); ⑤ System.out.println(df1.format(num1)); System.out.println(df2.format(num2)); System.out.println(df3.format(num2)); System.out.println(df4.format(num1)); System.out.println(df5.format(num2)); } } 代码解析: ① #:代表一个位置数字,如果该位置数字不存在,则省略不显示。 ,:代表数字中的分隔符,此示例用三位分隔一次。 ② 0:代表一个数字位置,如果该位置不存在,则用0来补充。小数中多余部分四舍五入。 .:表示小数点。 #:当前位置是0,则省略不显示。 ③ #:小数部分只显示1位小数,并且进行四舍五入。 ④ E:科学计数法。 ⑤ %:用百分数表示数字。 代码输出结果: 1,234,567 .13 00.1 1.23E6 12.65% 4. java.util.Calendar Calendar类是一个抽象类,它为特定的值诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换和操作日历字段(例如获得下星期的日期)提供了丰富的方法。并且可以非常方便的与Date类型进行相互转换。 使用静态方法getInstance()和getInstance(Locale locale)获取Calendar对象。Calendar定义了很多表示日期时间中各个部分的常量字段。 返回值 字段 说明 static int AM 指示从午夜到中午之前这段时间的 AM_PM 字段值。 static int DATE get 和 set 的字段,指示一个月中的某天。 static int DAY_OF_MONTH get 和 set 的字段,指示一个月中的某天。 static int DAY_OF_WEEK get 和 set 的字段,指示一个星期中的某天。 static int DAY_OF_YEAR get 和 set 的字段,指示当前年中的天数。 static int HOUR get 和 set 的字段,指示上午或下午的小时。 static int HOUR_OF_DAY get 和 set 的字段,指示一天中的小时。 static int MINUTE get 和 set 的字段,指示一小时中的分钟。 static int MONTH 指示月份的 get 和 set 的字段。 static int PM 指示从中午到午夜之前这段时间的 AM_PM 字段值。 static int SECOND get 和 set 的字段,指示一分钟中的秒。 static int WEEK_OF_MONTH get 和 set 的字段,指示当前月中的星期数。 static int WEEK_OF_YEAR get 和 set 的字段,指示当前年中的星期数。 static int YEAR 表示年的 get 和 set 的字段。 表9 Calendar类中的日期字段 Calendar类提供了丰富的操作方法,可以单独对年、月、日、时、分、秒等字段单独读取,也可以对星期设置,常用方法如下: 返回 方法 说明 void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。 boolean after(Object when) 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。 boolean before(Object when) 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。 int get(int field) 返回给定日历字段的值。 int getActualMaximum(int field) 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。 int getActualMinimum(int field) 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值。 Date getTime() 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。 long getTimeInMillis() 返回此 Calendar 的时间值,以毫秒为单位。 void set(int field, int value) 将给定的日历字段设置为给定值。 void set(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 void set(int year, int month, int date, int hourOfDay, int minute) 设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。 void set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 void setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。 void setTimeInMillis(long millis) 用给定的 long 值设置此 Calendar 的当前时间值。 表10 Calendar类常用方法 代码演示:Calendar的使用 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; public class Demo8 { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar cale = Calendar.getInstance(); cale.set(2009, 8, 20);// 年月日同时设置 ① cale.set(Calendar.DAY_OF_WEEK, 2); ② Date date1 = cale.getTime(); ③ System.out.println(sdf.format(date1)); cale.set(Calendar.MONTH, 3); ④ cale.set(Calendar.DAY_OF_MONTH, 28); ⑤ cale.set(Calendar.YEAR, 1978); ⑥ Date date2 = cale.getTime(); System.out.println(sdf.format(date2)); } } 代码解析: ① 可以使用set方法对年月日时分秒同时设置。 ② 把天定位到星期一,Calendar中认为第一天是星期天,设置2就是星期一。 ③ Calendar类型转换为日期时间等价的Date类型。 ④ 单独设置月。 ⑤ 单独设置日。 ⑥ 单独设置年。 代码输出结果: 2009-09-21 17:21:37 1978-04-28 17:21:37 Q 老师,为什么通过Calendar设置月与输出差1个月? A 不是差一个月,而是在Calendar中对月份的计算是从0开始的,因此设置月份11其实就是中国的十二月。 5. Java对集合的操作 Java中学习了集合的操作,比如:排序、搜索等,Java中用java.util.Arrays对数组操作,使用java.util.Collections对集合框架中List操作。他们都是工具类,类中的方法全部都是静态方法。  Arrays中的方法 1. void Arrays.sort(T[]) 对数组中的元素按照升序进行排序。T代表某一数据类型。 代码演示:binarySearch使用 public static void main(String[] args) { int[] arrs=new int[]{12,54,12,8765,123,34,54,23,67}; Arrays.sort(arrs); for (int i : arrs) { System.out.print(i+" "); } } 代码输出结果: 12 12 23 34 54 54 67 123 8765 在sort方法中,遇到对象数组的排序时,要给对象提供排序的依据,实现Comparator接口,可以在接口的compare方法中指定排序规则,实现Comparator接口的对象称为比较器。 有一个Student类的数组,现在按照年龄进行升序排序,那么Comparator接口compare方法实现如下: 代码演示:compare重新按年龄实现 class Student { String name; int age; public Student(String name, int age) { super(); this.name = name; this.age = age; } public String toString() { return name + "," + age; } } class StuCom implements Comparator<Student> { ① public int compare(Student stu1, Student stu2) { ② if (stu1.age > stu2.age) { return 1; } else if (stu1.age == stu2.age) { return 0; } else { return -1; } } } public static void main(String[] args) { Student[] stus = new Student[] { new Student("小美", 21), new Student("阿聪", 22), new Student("武大郎", 28), new Student("阮小七", 26), new Student("晁盖", 30), new Student("鲁智深", 29), new Student("孙二娘", 26), new Student("扈三娘", 23), new Student("武松", 24) }; Arrays.sort(stus, new StuCom()); for (Student student : stus) { System.out.println(student); } } 代码解析: ① 定义一个比较器,必须实现Comparator接口,否则系统无法对一个对象数组进行搜索规则。 ② 实现Comparator接口的compare方法,对该方法中的两个参数进行比较,就是制定了比较的规则。 代码输出结果: 小美,21 阿聪,22 扈三娘,23 武松,24 阮小七,26 孙二娘,26 武大郎,28 鲁智深,29 晁盖,30 2. List Arrays.asList(Object[] objs) 把指定的数组转换为List的对象。 代码演示:asList使用 import java.util.Arrays; import java.util.List; public class Demo9 { public static void main(String[] args) { String[] strs={"aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii","jjj"}; List list=Arrays.asList(strs); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } } 3. int Arrays.binarySearch(T[] objs, key) 在数组objs中查找key的位置,返回key的下标,如果查找不到key,则返回负值。 int Arrays.binarySearch(T[] objs,int fromIndex,int toIndex , key) 在数组objs中从fromIndex到toIndex位置上查找key,返回key的下标,如果查找不到,返回一个负值。 在binarySearch方法调用之前一定要保证数组已经是排序的,如果没有排序,可以使用Arrays.sort(T[]) 进行排序,然后再进行查找。 代码演示:binarySearch使用 public static void main(String[] args) { String[] strs={"aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii","jjj"}; Arrays.sort(strs); System.out.println(Arrays.binarySearch(strs, "ccc")); System.out.println(Arrays.binarySearch(strs, 4,8,"ggg")); System.out.println(Arrays.binarySearch(strs, 4,8,"aaa")); } 如果数组是一个自定义的对象数组,那么搜索之前要先指定比较器。 代码演示:binarySearch搜索对象使用 class StuCom implements Comparator<Student> { ① public int compare(Student stu1, Student stu2) { if (stu1.age > stu2.age) { return 1; } else if (stu1.age == stu2.age && stu1.name.equals(stu2.name)) { return 0; } else { return -1; } } } public static void main(String[] args) { Student[] stus = new Student[] { new Student("小美", 21), new Student("阿聪", 22), new Student("武大郎", 28), new Student("阮小七", 26), new Student("晁盖", 30), new Student("鲁智深", 29), new Student("孙二娘", 26), new Student("扈三娘", 23), new Student("武松", 24) }; Student s = new Student("晁盖", 30); System.out.println(Arrays.binarySearch(stus, s, new StuCom())); ② } 代码解析: ① 该比较器规定了要比较的类型就是Student类型,因此这里使用泛型。 ② 指定了对象数组,对象和比较器的方法进行搜索。结果返回搜索到的对象在数组中的下标。 除了上面介绍Arrays的方法外,还有一些其它的方法: 方法 说明 T[] copyOf(T[] t,int length) 把一个数组赋值到长度是length的新数组中。T表示数据类型。 fill(T[] t,N newValue) 用一个固定值填充数组中所有元素。 表11 Arrays其他常用方法。  Collections类 Collections类与Arrays类一样都提供了一系列的静态方法,只是Arrays主要操作数组,而Collections主要操作List集合,同时还有对Set的相关操作。 代码演示:Collections操作 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Demo10 { static class Student implements Comparable { ① String name; int age; public Student(String name, int age) { super(); this.name = name; this.age = age; } public String toString() { return name + "," + age; } public int compareTo(Object o) { ② Student stu = (Student) o; if (this.age > stu.age) { return 1; } else if (this.age == stu.age && this.name.equals(stu.name)) { return 0; } else { return -1; } } } public static void main(String[] args) { List<Student> list = new ArrayList<Student>(); Student[] stus = new Student[] { new Student("小美", 21), new Student("阿聪", 22), new Student("武大郎", 28), new Student("阮小七", 26), new Student("晁盖", 30), new Student("鲁智深", 29), new Student("孙二娘", 26), new Student("扈三娘", 23), new Student("武松", 24) }; Collections.addAll(list, stus); ③ Collections.sort(list); ④ for (Student student : stus) { System.out.println(student); } Student stu = new Student("鲁智深", 29); int pos = Collections.binarySearch(list, stu); ⑤ System.out.println(pos); } } 代码解析: ① 在List中查找一个对象时,该对象必须实现Comparable接口。 ② compareTo方法中使用当前对象与参数对象进行比较。 ③ 把一个数组对象复制到List对象中用方法Collections.addAll(……)方法 ④ 对List集合中的元素按照自然顺序排序。 ⑤ 二分法查找,在List集合中查找Student对象,要求Student对象必须实现Comparable接口。 Collections的主要操作有: 1. int binarySearch(List<? extends Comparable<? super T>> list, T key) 该方法是寻找T对象在List中匹配元素的位置。要求List集合中必须全部都是T对象,T对象必须实现Comparable接口,如果查找成功返回对象在List中的位置,否则返回负数。该方法执行前首先要对List对象中的元素排序,该方法还有一个重载方法是: int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 该方法也是查找T对象在List中的位置,List集合中必须全部是T元素,但是不要去T必须实现Comparable接口,而是要求传入一个比较器。 2. sort(List<T> list) 对List中的元素按照自然排序。要按照用户自定义方式进行排序,必须实现Comparator接口。 sort (List<T> list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。 3. swap(List<?> list, int i, int j) 在指定列表的指定位置处交换元素。 4. reverse(List<?> list) 反转指定列表中元素的顺序。 在Collections中还有其他一些方法,可以参考JavaDoc文档。 6. java.lang.Math类 在java.lang.Math类中,包含用于执行基本数学运算的方法,如指数、对数、平方根和三角函数等。Math类中定义的所有方法和常量全部都是静态的,使用非常方便。定义的常量主要有两个:Math.E和Math.PI分别表示自然对数的底数和圆周率。 Math类中主要的方法有: 返回 方法 说明 static T abs(T a) 返回 long 值的绝对值。 static double acos(double a) 返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间。 static double atan(double a) 返回一个值的反正切;返回的角度范围在 -pi/2 到 pi/2 之间。 static double ceil(double a) 返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。 static double cos(double a) 返回角的三角余弦。 static double floor(double a) 返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。 static double log(double a) 返回 double 值的自然对数(底数是 e)。 static double log10(double a) 返回 double 值的底数为 10 的对数。 static T max(T a, T b) 返回两个 double 值中较大的一个。 static T min(T a, T b) 返回两个 long 值中较小的一个。 static T pow(T a, T b) 返回第一个参数的第二个参数次幂的值。 static double random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。 static int round(float a) 返回最接近参数的 int。 static double sin(double a) 返回角的三角正弦。 static double sqrt(double a) 返回正确舍入的 double 值的正平方根。 static double tan(double a) 返回角的三角正切。 表12 Math类中的常见静态方法
DataX Web是在DataX之上开发的分布式数据同步工具,提供简单易用的操作界面,降低用户使用DataX的学习成本,缩短任务配置时间,避免配置过程中出错。用户可通过页面选择数据源即可创建数据同步任务,RDBMS数据源可批量创建数据同步任务,支持实时查看数据同步进度及日志并提供终止同步功能,集成并二次开发xxl-job可根据时间、自增主键增量同步数据。 任务"执行器"支持集群部署,支持执行器多节点路由策略选择,支持超时控制、失败重试、失败告警、任务依赖,执行器CPU.内存.负载的监控等等。后续还将提供更多的数据源支持、数据转换UDF、表结构同步、数据同步血缘等更为复杂的业务场景。 DataX Web安装环境: Language: Java 8(jdk版本建议1.8.201以上) Python2.7(支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下) Environment: MacOS, Windows,Linux Database: Mysql5.7 DataX Web功能特点: 1、通过Web构建DataX Json; 2、DataX Json保存在数据库中,方便任务的迁移,管理; 3、Web实时查看抽取日志,类似Jenkins的日志控制台输出功能; 4、DataX运行记录展示,可页面操作停止DataX作业; 5、支持DataX定时任务,支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效; 6、调度采用中心式设计,支持集群部署; 7、任务分布式执行,任务"执行器"支持集群部署; 8、执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行; 9、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等; 10、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度; 11、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务; 12、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试; 13、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式; 14、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色; 15、任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔; 16、运行报表:支持实时查看运行数据,以及调度报表,如调度日期分布图,调度成功分布图等; 17、指定增量字段,配置定时任务自动获取每次的数据区间,任务失败重试,保证数据安全; 18、页面可配置DataX启动JVM参数; 19、数据源配置成功后添加手动测试功能; 20、可以对常用任务进行配置模板,在构建完JSON之后可选择关联模板创建任务; 21、jdbc添加hive数据源支持,可在构建JSON页面选择数据源生成column信息并简化配置; 22、优先通过环境变量获取DataX文件目录,集群部署时不用指定JSON及日志目录; 23、通过动态参数配置指定hive分区,也可以配合增量实现增量数据动态插入分区; 24、任务类型由原来DataX任务扩展到Shell任务、Python任务、PowerShell任务; 25、添加HBase数据源支持,JSON构建可通过HBase数据源获取hbaseConfig,column; 26、添加MongoDB数据源支持,用户仅需要选择collectionName即可完成json构建; 27、添加执行器CPU、内存、负载的监控页面; 28、添加24类插件DataX JSON配置样例 29、公共字段(创建时间,创建人,修改时间,修改者)插入或更新时自动填充 30、对swagger接口进行token验证 31、任务增加超时时间,对超时任务kill datax进程,可配合重试策略避免网络问题导致的datax卡死。 32、添加项目管理模块,可对任务分类管理; 33、对RDBMS数据源增加批量任务创建功能,选择数据源,表即可根据模板批量生成DataX同步任务; 34、JSON构建增加ClickHouse数据源支持; 35、执行器CPU.内存.负载的监控页面图形化; 36、RDBMS数据源增量抽取增加主键自增方式并优化页面参数配置; 37、更换MongoDB数据源连接方式,重构HBase数据源JSON构建模块; 38、脚本类型任务增加停止功能; 39、rdbms json构建增加postSql,并支持构建多个preSq

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值