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 2018
自1970年1月1日起以毫秒为单位的时间(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