JAVA数据清洗分析常用类库

Arrays常用方法

在这里插入图片描述

程序示例:

import java.util.Arrays;
import java.util.Random;
public class ArraysDemo
{
    public static void main(String[] args)
    {
        int arr[]  = new int[10];     //定义数组
        Arrays.fill(arr,9);     //将数组每一个元素都设置成9
        System.out.println("fill:" + Arrays.toString(arr));
        Random random = new Random();
        for (int i=0; i<arr.length; i++)
        {
            arr[i] = random.nextInt(101);       使用100以内的随机数赋值数组
        }
        System.out.println("重新赋值:" + Arrays.toString(arr));
        arr[5] = 50;
        Arrays.sort(arr);
        System.out.println("sort排序后:" + Arrays.toString(arr));
        int i = Arrays.binarySearch(arr,50);       //返回50这个元素所在下标,二分查找。
        System.out.println("值为50的元素索引:"+i);
        int newArr[] = Arrays.copyOf(arr,arr.length);   //复制数组
        System.out.println("equals:"+Arrays.equals(arr, newArr));
        int arr1[] = {10, 29, 32, 50, 51, 56, 63, 66, 85, 96};
        int arr2[] = {10, 29, 32, 50, 51, 56, 63, 66, 85, 96};
        System.out.println("equals:"+Arrays.equals(arr1, arr2));    //由此可以看出Arrays.equals()函数比较的是数组的元素是否相同。
    }

}

运行结果:

fill:[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
重新赋值:[69, 83, 40, 58, 94, 42, 2, 53, 43, 83]
sort排序后:[2, 40, 43, 50, 53, 58, 69, 83, 83, 94]
值为50的元素索引:3
equals:true
equals:true

StringTokenizer 类

Java StringTokenizer 属于 java.util 包,用于分隔字符串。

StringTokenizer 构造方法:

  • 1. StringTokenizer(String str) :构造一个用来解析 str 的 StringTokenizer 对象。java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)。
  • 2. StringTokenizer(String str, String delim) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符。
  • 3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。

StringTokenizer 常用方法:

  • 1. int countTokens():返回nextToken方法被调用的次数。

  • 2. boolean hasMoreTokens():返回是否还有分隔符。

  • 3. boolean hasMoreElements():判断枚举 (Enumeration) 对象中是否还有数据。

  • 4. String nextToken():返回从当前位置到下一个分隔符的字符串。

  • 5. Object nextElement():返回枚举 (Enumeration) 对象的下一个元素。

  • 6. String nextToken(String delim):与 4 类似,以指定的分隔符返回结果。

     String str = "runoob,google,taobao,facebook,zhihu";
            // 以 , 号为分隔符来分隔字符串
    StringTokenizer st=new StringTokenizer(str,",");
            while(st.hasMoreTokens()) { 
                System.out.println(st.nextToken());
            }
    

StringBuilder

StringBuilder 类是可变的。它是 String 的对等类,它可以增加和编写字符的可变序列,并且能够将字符插入到字符串中间或附加到字符串末尾(当然是不用创建其他对象的) StringBuilder 的构造方法: 在这里插入图片描述 StringBuilder 类的常用方法: 在这里插入图片描述 程序示例:

public class StringBuilderTest {

    public static void main(String[] args){
        //定义和初始化一个StringBuilder类的字串s
        StringBuilder s = new StringBuilder("I");
        //在s后面添加字串" java"
        s.append(" java");
        //在s[1]的位置插入字串
        s.insert(1, " love");
        String t = s.toString(); //转为字符串
        System.out.println(t);
    }
}

Calendar

Date()的方法可以获取本地当前的时间,返回的就是一串时间,而当我们想去了解这个时间关于日历的内容,比如今天是第几周,第几个月这种信息,那我们就需要结合Calendar类进行操作,

Calendar 类是一个抽象类,它完成 Date 类与普通日期表示法之间的转换,而我们更多的是使用 Calendar 类的子类 GregorianCalendar 类。它实现了世界上普遍使用的公历系统。当然我们也可以继承 Calendar 类,然后自己定义实现日历方法。

  • TimeZone 是 java.util 包中的一个类,其中封装了有关时区的信息。每一个时区对应一组 ID。类 TimeZone 提供了一些方法完成时区与对应 ID 两者之间的转换。

例如:

//太平洋时区的 ID 为 PST
TimeZone tz0 = TimeZone.getTimeZone("PST")
//getDefault()可以获取主机所处时区的对象
TimeZone tz1 = TimeZone.getDefault()
Locale 只是一种机制,它用来标识一个特定的地理、政治或文化区域获取一个 Locale 对象的构造方法:
//调用Locale类的构造方法
Locale l0 = new Locale(String language)
Locale l1 = new Locale(String language, String country)
Locale l2 = new Locale(String languge, String country, String variant)

//调用Locale类中定义的常量
Locale l1 = Locale.CHINA
123456789101112

程序示例:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalendarDemo {
    public static void main(String[] args) {
        System.out.println("完整显示日期时间:");
        // 字符串转换日期格式
        DateFormat fdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = fdate.format(new Date());
        System.out.println(str);

        // 创建 Calendar 对象
        Calendar calendar = Calendar.getInstance();
        // 初始化 Calendar 对象,但并不必要,除非需要重置时间
        calendar.setTime(new Date());

        // 显示年份
        System.out.println("年: " + calendar.get(Calendar.YEAR));

        // 显示月份 (从0开始, 实际显示要加一)
        System.out.println("月: " + calendar.get(Calendar.MONTH));


        // 当前分钟数
        System.out.println("分钟: " + calendar.get(Calendar.MINUTE));

        // 今年的第 N 天
        System.out.println("今年的第 " + calendar.get(Calendar.DAY_OF_YEAR) + "天");

        // 本月第 N 天
        System.out.println("本月的第 " + calendar.get(Calendar.DAY_OF_MONTH) + "天");

        // 3小时以后
        calendar.add(Calendar.HOUR_OF_DAY, 3);
        System.out.println("三小时以后的时间: " + calendar.getTime());
        // 格式化显示
        str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
        System.out.println(str);

        // 重置 Calendar 显示当前时间
        calendar.setTime(new Date());
        str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
        System.out.println(str);

        // 创建一个 Calendar 用于比较时间
        Calendar calendarNew = Calendar.getInstance();

        // 设定为 5 小时以前,后者大,显示 -1
        calendarNew.add(Calendar.HOUR, -5);
        System.out.println("时间比较:" + calendarNew.compareTo(calendar));

        // 设定7小时以后,前者大,显示 1
        calendarNew.add(Calendar.HOUR, +7);
        System.out.println("时间比较:" + calendarNew.compareTo(calendar));

        // 退回 2 小时,时间相同,显示0
        calendarNew.add(Calendar.HOUR, -2);
        System.out.println("时间比较:" + calendarNew.compareTo(calendar));

        // calendarNew创建时间点
        System.out.println((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendarNew.getTime()));
        // calendar创建时间点
        System.out.println((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime()));
        System.out.println("时间比较:" + calendarNew.compareTo(calendar));
    }
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

编译运行:

$ javac CalendarDemo.java
$ java CalendarDemo
完整显示日期时间:
2018-12-12 15:50:49
年: 2018
月: 11
分钟: 50
今年的第 346天
本月的第 12天
三小时以后的时间: Wed Dec 12 18:50:49 CST 2018
2018-12-12 18:50:49:449
2018-12-12 15:50:49:455
时间比较:-1
时间比较:1
时间比较:1
2018-12-12 15:50:49:456
2018-12-12 15:50:49:455
时间比较:1

这里需要注意的是对于月份的输出,虽然现在是3月但输出的是2,这是因为这里使用的是罗马教皇日历是从0到11的,所以我们在输出时需要加1。

Date

Date 类表示日期和时间,里面封装了操作日期和时间的方法。Date 类经常用来获取系统当前时间。 来看看类 Date 中定义的未过时的构造方法: 在这里插入图片描述 程序示例:

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo {
    public static void main(String[] args) {
        String strDate, strTime;
        Date objDate = new Date();
        System.out.println("今天的日期是:" + objDate);
        long time = objDate.getTime();
        System.out.println("自1970年1月1日起以毫秒为单位的时间(GMT):" + time);
        strDate = objDate.toString();
        //提取 GMT 时间
        strTime = strDate.substring(11, (strDate.length() - 4));
        //按小时、分钟和秒提取时间
        strTime = "时间:" + strTime.substring(0, 8);
        System.out.println(strTime);
        //格式化时间
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(formatter.format(objDate));
    }
}
123456789101112131415161718192021

编译运行:

$ javac DateDemo.java
$ java DateDemo
今天的日期是:Wed Dec 12 14:43:15 CST 2018197011日起以毫秒为单位的时间(GMT):1544596995669
时间:14:43:15
2018-12-12 14:43:15
123456

Date 类的很多方法自 JDK 1.1 开始就已经过时了。

Math

Math 类在 java.lang 包中,包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 常见方法: 在这里插入图片描述

public class MathDemo {
    public static void main(String[] args) {
        System.out.println(Math.abs(-12.7));
        System.out.println(Math.ceil(12.7));    //向上取整
        System.out.println(Math.rint(12.4));    //向下取整
        System.out.println(Math.random());
        System.out.println("sin30 = " + Math.sin(Math.PI / 6));
        // 计算30°的正弦值,参数是用弧度表示的角,即π的六分之一
        System.out.println("cos30 = " + Math.cos(Math.PI / 6));
        // 计算30°的余弦值,这些计算三角函数的方法,其参数和返回值的类型都为double
        System.out.println("tan30 = " + Math.tan(Math.PI / 6));
        // 计算30°的正切值
    }
}
1234567891011121314

编译运行:

$ javac MathDemo.java
$ java MathDemo
12.7
13.0
12.0
0.8011998172263968
sin30 = 0.49999999999999994
cos30 = 0.8660254037844387
tan30 = 0.5773502691896257
123456789

System

System 类提供了一下功能: • 标准输入,标准输出和错误输出流; • 访问外部定义的属性和环境变量; • 加载文件和库的方法; • 以及用于快速复制数组的实用方法。 System 不可以被实例化,只可以使用其静态方法。

//从指定的源数组中复制一个数组,从源数组指定的位置开始,到目标数组指定的位置
public static void arraycopy(Object src,int srcPos, Object dest,int desPos,int length) 
//返回以毫秒为单位的当前时间(从1970年到现在的毫秒数)
public static long currentTimeMillis()  
//终止当前正在运行的Java虚拟机,status为 0时退出
public static void exit(int status)  
//  运行垃圾收集器
public static void gc() 
// 取得当前系统的全部属性
public static Properties getProperties()
//获取指定键的系统属性
public static String  getProperty(String key) 
123456789101112

Random

在Math类中我们已经讲了可以使用math.random()的方法来调取(0,1)的随机数,那么JAVA提供了一个更加灵活的获得随机数的办法就是Random类,我们可以使用public Random()或public Radnom(long seed)来创建Random对象,然后调用nextInt()或者其他方法来生成随机数,下面给几个例子。 这里需要注意的是我们可以使用nextBytes来使得byte数组中的值填充随机数,这种方法可以快速构造一个小的随机数组。

程序示例:

public class RandomDemo {
    public static void main(String[] args) {
        Random random = new Random();
        //随机生成一个整数 int范围
        System.out.println(random.nextInt());
        //生成 [0,n] 范围的整数  设n=100
        System.out.println(random.nextInt(100 + 1));
        //生成 [0,n) 范围的整数  设n=100
        System.out.println(random.nextInt(100));
        //生成 [m,n] 范围的整数  设n=100 m=40
        System.out.println((random.nextInt(100 - 40 + 1) + 40));
        //随机生成一个整数 long范围
        System.out.print(random.nextLong());
        //生成[0,1.0)范围的float型小数
        System.out.println(random.nextFloat());
        //生成[0,1.0)范围的double型小数
        System.out.println(random.nextDouble());
    }
}
12345678910111213141516171819

编译运行:

$ javac RandomDemo.java
$ java RandomDemo
272128541
67
93
66
-23177167376469717070.93104035
0.20044632645967309

以上内容来自:https://blog.csdn.net/qq_38331988/article/details/97623150

StringBuffer

经常我们需要对String字符串进行增删改的时候都会感觉会挺麻烦的,不太方便,但如果使用StringBuffer类的话,就可以直接调用方法进行操作。一般的操作有append增加字符串,insert插入、reverse转置、delete相关删除、repalce替换。我们会在程序中解释具体的类的使用。 先来展示append和单字符提取charAt的方法,

package test4;

public class Csdn2_1 {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("明曦君");

        //StringBuffer append(String s)\(int n)\(Object o)... 
        System.out.println("1.append添加字符串");
        s.append("加油!");
        System.out.println(s);

        //public chat charAt(int n); public voud setCharAt(int n, char ch)
        System.out.println(" ");
        System.out.println("2.charAt提取某个位子上得单个字符并替换该字符");
        char c = s.charAt(0);
        System.out.println(c);
        s.setCharAt(0, '晨'); //char类型需要使用单引号
        System.out.println(s);
    }
}

1234567891011121314151617181920
run:
1.append添加字符串
明曦君加油!

2.charAt提取某个位子上得单个字符并替换该字符
明
晨曦君加油!
1234567

然后我们来介绍一下insert、reverse以及delete和replace方法,

package test4;

public class Csdn2_1 {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("明曦君");
        System.out.println("3.插入字符串");
        s.insert(2, "GoGo");
        System.out.println(s);

        //public StringBuffer reverse()
        System.out.println(" ");
        System.out.println("4.将字符串进行翻转");
        s.reverse();
        System.out.println(s);

        //StringBuffer delete(int startIndex, int endIndex)
        System.out.println(" ");
        System.out.println("5.对字符串进行删除");
        s.delete(1, 5); //不包括右边界
        System.out.println(s);
        s.deleteCharAt(0);//删除第一个字符
        System.out.println(s);

        //StringBuffer replace(int startIndex, int endIndex, String str)
        System.out.println(" ");
        System.out.println("6.对字符串进行替换");
        s.replace(0, 2, "明曦");
        System.out.println(s);
    }
}
123456789101112131415161718192021222324252627282930
run:
3.插入字符串
明曦GoGo君

4.将字符串进行翻转
君oGoG曦明

5.对字符串进行删除
君曦明
曦明

6.对字符串进行替换
明曦
12345678910111213

当然如果有时候就是想用String类型,但又想进行操作,我们可以先对String转换为StringBuffer然后再转换回String。

package test4;

public class Csdn2_1 {
    public static void main(String[] args) {
        String ss = "明曦君";
        StringBuffer sss = new StringBuffer(ss);
        sss.reverse();
        ss = sss.toString();
        System.out.println(ss);
    }
}
1234567891011
run:
君曦明

BigInteger

当遇到很多维的数值时,我们的基础类型long这些都不管用,甚至是Long类也不管用的时候就可以调用BigInteger,这个是java.math里面的类提供任意精度的整数运算。方然运用BigInteger类了之后就不能直接使用加减乘除来对进行运算了,需要使用方法来进行操作。使用public BigInreger(String val)来创建一个大整数,

类名 返回
public BigInteger add(BigInteger val) 大整数求和
public BigInteger subtract(BigInteger val) 对参数大整数求差
public BigInteger multiply(BigInteger val) 对参数大整数求积
public BigInteger divide(BigInteger val) 对参数大整数求商
public BigInteger remainder(BigInteger val) 对参数大整数求余
public BigInteger pow(int a) 返回当前大整数的a次幂
public int compareTo(BigInteger val) 比较大小,返回1,-1,0
public String toString() 十进制字符串表示
public String toString(int p) p进制字符串表示

我们通过计算一个实例来展示我们的代码,我们计算6的二次方除以3然后再加上5的结果与18比大小,

package test4;
import java.math.BigInteger;

public class Csdn2_1 {
    public static void main(String[] args) {
        BigInteger k = new BigInteger("6");
        BigInteger c = new BigInteger("3");
        BigInteger d = new BigInteger("5");
        BigInteger f = new BigInteger("18");
        System.out.println("计算k的2次方除以c加d并与f比大小");             
        System.out.println(k.pow(2).divide(c).add(d).compareTo(f));
    }
}
run:
计算k的2次方除以c加d并与f比大小
-1

results matching ""

    No results matching ""