一、StringBuffer类
当对字符串进行修改的时候,需要使用StringBuffer类。和String类不同的是,StringBuffer类的对象能够被多次的修改,并且不产生新的未使用对象。
在使用StringBuffer类时,每次都会对StringBuffer对象进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用StringButter。
1.StringBuffer的常用方法
序号 | 方法定义 | 类型 | 描述 |
1 | public StringBuffer() | 构造 | StringBuffer的构造方法 |
2 | public StringBuffer append(char c) | 方法 | 在StringBuffer中提供了大量的追加操作(与String中使用“+”类似),可以向StringBuffer中追加内容,此方法可以添加任何类型数据 |
3 | public StringBuffer append(String str) | 方法 | |
4 | public StringBuffer append(StringButter sb) | 方法 | |
5 | public int indexOf(String str) | 方法 | 查找指定字符串是否存在 |
6 | public int indexOf(String str, int formIndex) | 方法 | 从指定位置开始查找指定字符串是否存在 |
7 | public StringBuffer insert(int offset, String str) | 方法 | 在指定位置处加上指定字符串 |
8 | public StringBuffer reverse | 方法 | 将内容反转保存 |
9 | public StringBuffer replace(int start, int end, String str) | 方法 | 指定内容替换 |
10 | public int length() | 方法 | 求出内容长度 |
11 | public StringBuffer delete(int start, int end) | 方法 | 删除指定范围的字符串 |
12 | public String substring(int start) | 方法 | 字符串截取,指定开始点 |
13 | public String substring(int start, int end) | 方法 | 截取指定范围的字符串 |
14 | public String toString() | 方法 | Object类继承的方法,用于将内容变为String类型 |
(1.)实例操作1-----字符串连接操作(append)
在程序中使用append()方法可以进行字符串连接,而且此方法返回了一个StringBuffer类的实例,这样就可以采用代码链的形式一直调用append()方法。
例:通过append()方法连接各种类型的数据
package charjava;
public class java25 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer(); // 声明StringBuffer对象
buf.append("Hello"); // 向StringBuffer中添加内容
buf.append("World").append("!!!"); // 可以连续调用append方法
buf.append("\n"); // 添加一个转义字符表示换行
buf.append("数字 =").append(1).append("\n"); // 可以添加数字
buf.append("字符 =").append('C').append("\n"); // 可以添加字符
buf.append("布尔 =").append(true); // 可以添加布尔类型
System.out.println(buf); // 内容输出
}
}
(2.)实例操作2-----在任意位置处为StringBuffer添加内容
可以直接使用Insert()方法,在指定的位置上为StringBuffer添加内容。
例:在任意位置处为StringBuffer添加内容
package charjava;
public class java26 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer(); // 声明StringBuffer对象
buf.append("World"); // 向StringBuffer中添加内容
buf.insert(0,"Hello"); // 在所有内容之前添加
System.out.println(buf); // 将修改后的结果输出
buf.insert(buf.length(),"MLDN ~"); // 在最后添加
System.out.println(buf); // 将内容输出
}
}
(3.)实例操作3-----字符串反转操作
在StringBuffer中专门提供了字符串反转的操作方法。字符串反转是指将一个是”Hello"的字符串转为“olleH"。
例:字符串反转操作
package charjava;
public class java28 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer(); // 声明StringBuffer对象
buf.append("World!!"); // 向StringBuffer中添加内容
buf.insert(0,"Hello"); // 在所有内容之前添加
String str = buf.reverse().toString(); // 将内容反转后变为String类型
System.out.println(str); // 将内容输出
}
}
(4.)实例操作4-----替换指定范围的内容
在StringBuffer类中也存在replace()方法。使用此方法可以对指定范围内容进行替换。
例:替换指定范围的内容
package charjava;
public class java27 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer(); // 声明StringBuffer对象
buf.append("Hello").append("World!!"); // 向StringBuffer中添加内容
buf.replace(5,11,"LiXingHua"); // 将World替换为LiXingHua
System.out.println("内容替换之后的结果:" + buf); // 删除替换之后的内容
}
}
在String中如果要想进行替换,则使用的是replaceAll()方法,而在StringBuffer中使用的方法是replace()方法。
(5.)实例操作5-----字符串截取
例:截取指定范围的字符串内容
package charjava;
public class java29 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer(); // 声明StringBuffer对象
buf.append("Hello").append("World!!"); // 向StringBuffer中添加内容
buf.replace(6,11,"LiXingHua"); // 将World替换为LiXingHua
String str = buf.substring(6, 15); // 指定截取范围,并把内容转换为String类型
System.out.println("截取之后的内容:" + str); // 将截取后的结果进行输出
}
}
(6.)实例操作6-----删除指定范围的字符串
因为StringBuffer本身的内容是可更改的,所有也可以通过delete()方法删除指定范围的内容。
例:从StringBuffer中删除指定范围的字符串
package charjava;
public class java30 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer(); // 声明StringBuffer对象
buf.append("Hello").append("World!!"); // 向StringBuffer中添加内容
buf.replace(6,11,"LiXingHua"); // 将World替换为LiXingHua
String str = buf.delete(6, 15).toString(); // 指定截取范围,并把内容转换为String类型
System.out.println("删除之后的内容:" + str); // 将截取后的结果进行输出
}
}
(7.)实例操作7-----查找指定的内容是否存在
通过indexOf()方法可以查找指定的内容,如果查找到了,则返回内容的位置;如果没有查找到。
package charjava;
public class java31 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer(); // 声明StringBuffer对象
buf.append("Hello").append("World!!"); // 向StringBuffer中添加内容
if (buf.indexOf("Hello") == -1) { // 没有查找到,则返回-1
System.out.println("没有查找到指定的内容");
}else { // 不为-1表示查找内容
System.out.println("可以查找到指定的内容");
}
}
}
(8.)String、StringBuffer、StringBuilder的区别
- String的内容一旦声明则不可改变,而SrtringBuffer与StringBuilder声明的内容可以改变。
- StringBuffer类中提供的方法都是同步方法,属于安全的线程操作,而StringBuilder类中的方法都属于异步方法,属于非线程安全的操作。
2.System类
System类是一些与系统相关的属性和方法的集合,而且在System类中所有的属性都是静态的,要想引用这些属性和方法,直接使用System类调用即可。
System类的常用方法
序号 | 方法定义 | 类型 | 描述 |
1 | public static void exit(int status) | 普通 | 系统退出,如果status为非0就表示退出 |
2 | public static void gc() | 普通 | 运行垃圾手机机制,调用的是Runtime类中的gc()方法 |
3 | public static long currentTimeMillis() | 普通 | 返回以毫秒为单位的当前时间 |
4 | public static void arraycopy(Object src, int srcPos,Object dest, int destPos, int length) | 普通 | 数组复制操作 |
5 | public static Properties getProperties() | 普通 | 取得当前的系统全部属性 |
6 | public static String getProperty(String key) | 普通 | 根据键值取得属性的具体内容 |
例:计算一个程序的执行时间
package charjava;
public class java32 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); // 取得开始计算之前的时间
int sum = 0; // 声明变量存放累加后的结果
for (int i = 0; i < 30000000; i++) { // 执行累加操作
sum += i;
}
long endTime = System.currentTimeMillis();
System.out.println("计算所花费的时间:" + (endTime - startTime) + "毫秒");
}
}
例:列出指定属性
package charjava;
public class java33 {
public static void main(String[] args) {
System.out.println("系统版本为:" + System.getProperty("os.name") + System.getProperty("os.version") + System.getProperty("os.arch")); // 获取当前系统版本
System.out.println("系统用户为:" + System.getProperty("user.name"));
System.out.println("当前用户目录:" + System.getProperty("user.home"));
System.out.println("当前用户工作目录:" + System.getProperty("user.dir"));
}
}
3.日期操作类
再程序的开发中经常会遇到日期类型的操作。Java对于日期的操作也提供了良好的支持,主要使用java.util包中的Date、Calendar,以及java.text包中的SimpleDateFormat实现。
3.1Date类
Date类是一个相对较为简单的操作类,在使用中直接使用java.util.Date类的构造方法并进行输出就可以得到一个完整的日期,构造方法定义如下:
例:得到当前系统日期
package charjava;
import java.util.Date;
public class java34 {
public static void main(String[] args) {
Date date = new Date(); // 实例Date类对象
System.out.println("当前日期为:" + date); // 输出日期
}
}
在Date类的方法中,还提供有两个long与Date间的转换操作方法:
- 构造方法:public Date(long date)
- 将Date变为long:public long getTime()
例:Date与long间的转换
package charjava;
import java.util.Date;
public class java35 {
public static void main(String[] args) throws Exception {
long cur = System.currentTimeMillis(); // 取得当前的日期时间以long型返回
Date date = new Date(cur); // 将long转换为Date
System.out.println(date); // 输出对象信息
System.out.println(date.getTime()); // 输出对象信息
}
}
3.2Calendar类
Calendar类可以将取得的时间精确到毫秒。
calendar类中的常量
序号 | 常量 | 类型 | 描述 |
1 | public static final int YEAR | int | 取得年 |
2 | public static final int MONTH | int | 取得月 |
3 | public static final DAY_OF_MONTH | int | 取得日 |
4 | public static final int HOUR_OF_MONTH | int | 取得小时,24小时制 |
5 | public static final int MINUTE | int | 取得分 |
6 | public static final int SECOND | int | 取得秒 |
7 | public static final int MILLISECOND | int | 取得毫秒 |
Calendar类中提供的方法
序号 | 方法 | 类型 | 描述 |
1 | public static Calendar getInstance() | 普通 | 根据默认的时区实例化对象 |
2 | public boolean after(Object when) | 普通 | 判断一个日期是否在指定日期之后 |
3 | public boolean before(Object when) | 普通 | 判断一个日期是否在指定日期之前 |
4 | public int get(int field) | 普通 | 返回给定日历字段的值 |
例:取得系统的当前日期
package charjava;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class java36 {
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(); // 声明一个Calendar对象,通过子类为其实例化
System.out.println("年:" + calendar.get(Calendar.YEAR)); // 年
System.out.println("月:" + calendar.get(Calendar.MONTH) + 1); // 月
System.out.println("日:" + calendar.get(Calendar.DAY_OF_MONTH)); // 日
System.out.println("时:" + calendar.get(Calendar.HOUR_OF_DAY)); // 时
System.out.println("分:" + calendar.get(Calendar.MINUTE)); // 分
System.out.println("秒:" + calendar.get(Calendar.SECOND)); // 秒
System.out.println("毫秒:" + calendar.get(Calendar.MILLISECOND)); // 毫秒
}
}
3.3DateFormat类
DateFormat类与MessageFormat类都属于Format类的子类,专门用于格式化数据使用。
DateFormat类的常用方法
序号 | 方法 | 类型 | 描述 |
1 | public static final DateFormat getDateInstance() | 普通 | 得到默认的对象 |
2 | public static final DateFormat getDateInstance(int style, Locale aLocale) | 普通 | 根据Locale得到对象 |
3 | public static final DateFormat getDateTimeInsetance() | 普通 | 得到日期和时间对象 |
4 | public static final DateFormat getDateTimeInstance(int dataStyle,int timeStyle,Locale aLocale) | 普通 | 根据Locale得到日期和时间对象 |
例:观察DateFormat中的默认操作
package charjava;
import java.text.DateFormat;
import java.util.Date;
public class java37 {
public static void main(String[] args) {
DateFormat df1 = DateFormat.getDateInstance(); // 声明DateFormat类对象,取得日期
DateFormat df2 = DateFormat.getDateTimeInstance(); // 声明DateFormat类对象,取得日期时间
System.out.println("DATE:" + df1.format(new Date())); // 格式化日期
System.out.println("DATETIME:" + df2.format(new Date()));
}
}
例:指定显示的风格
package charjava;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class java38 {
public static void main(String[] args) {
DateFormat df1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD, new Locale("zh", "CN")); // 声明DateFormat对象,取得日期,并设置日期显示风格
DateFormat df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD, DateFormat.ERA_FIELD, new Locale("zh", "CN")); // 声明DateFormat对象,取得日期和时间,设置日期和时间的显示格式
System.out.println("DATE:" + df1.format(new Date()));
System.out.println("DATETIME:" + df2.format(new Date()));
}
}
3.4SimpleDateFormat类
将一种日期格式转换为另外一种日期格式。
日期格式化模板标记
序号 | 标记 | 描述 |
1 | y | 年,年份是4位数字,所以需要使用“yyyy”表示 |
2 | M | 年中的月份,月份是两个数字,所以需要使用“MM”表示 |
3 | d | 月中的天数,天数是两位数字,所以需要使用“dd”表示 |
4 | H | 一天中的小时数(24小时),小时是两位数字,使用“HH”表示 |
5 | m | 小时中的分钟数,分钟是两位数字,使用“mm”表示 |
6 | s | 分钟中的秒数,秒是两位数字,使用“ss”表示 |
7 | S | 毫秒数,毫秒数字是3位数字,使用“SSS”表示 |
例:格式化日期操作
package charjava;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class java39 {
public static void main(String[] args) {
String strDate = "2017-03-15 10:11:30.345"; // 定义日期和时间的字符串
String pat1 = "yyyy-MM-dd HH:mm:ss.SSS"; // 准备第一个模板,从字符串提取日期数字
String pat2 = "yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒 SSS 毫秒"; // 准备第二个模板,将提取后的日期数字变为指定的格式
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1); // 实例化模板对象
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2); // 实例化模板对象
Date d = null;
try {
d = sdf1.parse(strDate); // 将给定字符串中的日期提取出来
}catch (ParseException e) { // 如果提供的字符串格式有错误,则进行异常处理
e.printStackTrace();
}
System.out.println(sdf2.format(d)); // 将日期转换为新的格式
}
}
3.5Math类
Math类是数学操作类,提供了一系列的数学操作方法,包括求绝对值,三角函数等。Math类中提供的一切方法都是静态方法,所以直接由类名称调用。
例:Math类的基本操作
package charjava;
public class java40 {
public static void main(String[] args) {
System.out.println("求平方根:" + Math.sqrt(9.0)); // Math类中的方法都是静态方法,直接使用“类名称.方法名称()”的形式调用
System.out.println("求两数的最大值:" + Math.max(10, 30));
System.out.println("求两数的最小值:" + Math.min(10, 30));
System.out.println("2的3次方:" + Math.pow(2, 3));
System.out.println("四舍五入:" + Math.round(33.6));
}
}
注意:Math类中round()方法主要作用就是实现四舍五入。
例:观察四舍五入
package charjava;
public class java41 {
public static void main(String[] args) {
System.out.println(Math.round(15.5)); // 16
System.out.println(Math.round(-15.5)); // -15
System.out.println(Math.round(-15.51)); // -16
}
}
注意:当四舍五入的数据为负数时,操作数据小数位大于0.5才进位,小于或等于0.5则不进位。
3.6Random类
Random是随时数产生类,可以指定一个随机数的范围,然后可以任意产生在此范围中的数字。
Random类中的常用方法
序号 | 方法 | 类型 | 描述 |
1 | public boolean nextBoolean() | 普通 | 随机生成boolean值 |
2 | public double nextDouble() | 普通 | 随机生成Double值 |
3 | public float nextFloat() | 普通 | 随机生成folat值 |
4 | public int nextInt() | 普通 | 随机生成int值 |
5 | public int nextInt(int n) | 普通 | 随机生成给定最大值的int值 |
6 | public long nextLong() | 普通 | 随机生成long值 |
例:生成10个随机数字,且数字不大于100
package charjava;
import java.util.Random;
public class java42 {
public static void main(String[] args) {
Random r = new Random(); // 定义Random对象
for (int i = 0; i < 10; i++) { // 输出10个随机数
System.out.println(r.nextInt(100) + "\t");
}
}
}
3.7NumberFormat类
NumberFormat表示数字的格式化类。
NumberFormat类的常用方法
序号 | 方法 | 类型 | 描述 |
1 | public static Locale[] getAvailableLocales() | 普通 | 返回所有语言环境的数组 |
2 | public static final NumberFormat getIntstance() | 普通 | 返回当前默认语言环境的数字格式 |
3 | public static NumberFormat getIntstance(Locale inLocale) | 普通 | 返回指定语言环境的数字格式 |
4 | public static fianl NumberFormat getCurrencyInstance() | 普通 | 返回当前默认环境的货币格式 |
5 | public static NumberFormat getCurrencyInstance(Locale inLocale) | 普通 | 返回指定语言环境的数字格式 |
NumberFormat类的常用方法
例:使用当前语言环境格式化数字
package charjava;
import java.text.NumberFormat;
public class java44 {
public static void main(String[] args) {
NumberFormat nf = NumberFormat.getInstance(); // 得到默认的数字格式显示
System.out.println("格式化之后的数字:" + nf.format(1000000));
System.out.println("格式化之后的数字:" + nf.format(1000.345));
}
}
3.8DecimalFormat类
DecimalFormat也是Format的一个子类,主要作用是格式化数字。
DecimalFormalFormat格式化模板
序号 | 标记 | 位置 | 描述 |
1 | 0 | 数字 | 代表阿拉伯数字,每一个0表示一位阿拉伯数字,如果该位不存在则显示0 |
2 | # | 数字 | 代表阿拉伯数字,每一个#表示一位阿拉伯数字1,如果该位不存在则不显示 |
3 | . | 数字 | 小数点分隔符或货币的小数分隔符 |
4 | - | 数字 | 代表负号 |
5 | , | 数字 | 分组分隔符 |
6 | E | 数字 | 分隔科学计数法中的尾数和指数 |
7 | ; | 子模式边界 | 分隔科学计数法中的尾数和指数 |
8 | % | 前缀或后缀 | 乘以100并显示位百位数 |
9 | \u2030 | 前缀或后缀 | 乘以100并显示为百分数 |
10 | \u00A4 | 前缀或后缀 | 货币记号,由货币替换,如果两个同时出现,则用国际货币符号替换,如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符 |
11 | , | 前缀或后缀 | 用于在前缀或后缀中为特殊字符加引号 |
例:格式化数字
package charjava;
import java.text.DecimalFormat;
class FormatDemo {
public void format1(String pattern, double value) {
DecimalFormat df = new DecimalFormat(pattern); // 声明一个DecimalFormat对象
String str = df.format(value); // 实例化对象
System.out.println("使用"+ pattern + "格式化数字" + value + ": " + str); // 格式化数字
}
}
public class java45 {
public static void main(String[] args) {
FormatDemo demo = new FormatDemo();
demo.format1("###,###.###", 111222.34567);
demo.format1("000,000.000", 11222.34567);
demo.format1("###,###.###¥", 111222.34567);
demo.format1("000,000.000¥", 111222.34567);
demo.format1("##.###%", 0.345678); // 使用百分数形式
demo.format1("00.###%", 0.0345678); // 使用百分数形式
demo.format1("###.###\u2030", 0.345678); // 使用千分数形式
}
}
3.9BigInteger类
BigInteger表示是大整数类,定义在Java.math包中,在BigInteger类中封装了各个常用的基本运算。
BigInteger类的常用方法
序号 | 方法 | 类型 | 描述 |
1 | public BigInteger(String val) | 构造 | 将一个字符串变为BigInteger类型的数据 |
2 | public BigInteger add(BigInteger val) | 普通 | 加法 |
3 | public BigInteger subtract(BigInteger val) | 普通 | 减法 |
4 | public BigInteger multiply(BigInteger val) | 普通 | 乘法 |
5 | public BigInteger divide(BigInteger val) | 普通 | 除法 |
6 | public BigInteger max(BigInteger val) | 普通 | 返回两个大数字中的最大值 |
7 | public BigInteger min(BigInteger val) | 普通 | 返回两个大数字的最小值 |
8 | public BigInteger[] divideAndRemainder(BigInteger val) | 普通 | 除法操作,数组的第1个元素为除法的商,第2个元素为除法的余数 |
例:验证BigInteger
package charjava;
import java.math.BigInteger;
public class java46 {
public static void main(String[] args) {
BigInteger big1 = new BigInteger("9"); // 定义BigInteger对象
BigInteger big2 = new BigInteger("11"); // 定义BigInteger对象
System.out.println("加法操作:" + big2.add(big1)); // 加法操作
System.out.println("减法操作:" + big2.subtract(big1)); // 减法操作
System.out.println("乘法操作:" + big2.multiply(big1)); // 乘法操作
System.out.println("除法操作:" + big2.divide(big1)); // 除法操作
System.out.println("最大数:" + big2.max(big1)); // 求出最大值
System.out.println("最小数:" + big2.min(big1)); // 求出最小值
BigInteger[] result = big2.divideAndRemainder(big1); // 除法操作
System.out.println("商是:" + result[0] + ";余数是:" + result[1]);
}
}
3.10BigDecimal类
BigInteger类用于数字精确计算。
BigDecimal的常用方法
序号 | 方法 | 类型 | 描述 |
1 | public BigDecimal(double val) | 构造 | 将double表示形式转换为BigDecimal |
2 | public BigDecimal(int val) | 构造 | 将int表示形式转换为BigDecimal |
3 | public BigDecimal(String val) | 构造 | 将字符串表示形式转换为BigDecimal |
4 | public BigDecimal add(BigDecimal augend) | 普通 | 加法 |
5 | public BigDecimal subtract(BigDecimal subtrahend) | 普通 | 减法 |
6 | public BigDecimal multiply(BigDecimal multiplicand) | 普通 | 乘法 |
7 | public BigDecimal divide(BigDecimal divisor) | 普通 | 除法 |
例:进行四舍五入的四则运算
package charjava;
import java.math.BigDecimal;
import java.math.RoundingMode;
class MyMath {
public static double add(double one, double two) { // 进行加法运算
BigDecimal big1 = new BigDecimal(one);
BigDecimal big2 = new BigDecimal(two);
return big1.add(big2).doubleValue();
}
public static double sub(double one, double two) { // 进行减法运算
BigDecimal big1 = new BigDecimal(one);
BigDecimal big2 = new BigDecimal(two);
return big1.subtract(big2).doubleValue();
}
public static double mul(double one, double two) { // 进行乘法运算
BigDecimal big1 = new BigDecimal(one);
BigDecimal big2 = new BigDecimal(two);
return big1.multiply(big2).doubleValue();
}
public static double div(double one, double two, int len) { // 进行除法运算
BigDecimal big1 = new BigDecimal(one);
BigDecimal big2 = new BigDecimal(two);
return big1.divide(big2, len, RoundingMode.HALF_UP).doubleValue();
}
public static double round(double d, int len) { // 进行四舍五入操作
BigDecimal big1 = new BigDecimal(d);
BigDecimal big2 = new BigDecimal(1);
return big1.divide(big2, len, RoundingMode.HALF_UP).doubleValue();
}
}
public class java47 {
public static void main(String[] args) {
System.out.println("加法运算:" + MyMath.round(MyMath.add(10.345, 3.333),2));
System.out.println("乘法运算:" + MyMath.round(MyMath.mul(10.345, 3.333), 2));
System.out.println("除法运算:" + MyMath.div(10.345, 3.333, 2));
System.out.println("减法运算:" + MyMath.round(MyMath.sub(10.345, 3.333), 2));
}
}
3.11Arrays类
Arrays类是数组的操作类,主要功能是实现数组元素的查找,数组内容的填充、排序等。
Arrays类的常用方法
序号 | 方法 | 类型 | 描述 |
1 | public static boolean equals(int[] a, int[] a2) | 普通 | 判断两个数组是否相等,此方法被重载多次,可以判断各种数据类型的数组 |
2 | public static void fill(int[] a, int val) | 普通 | 将指定内容填充到数组之中,此方法被重载多次,可以填充各种数据类型的数组 |
3 | public static void sort(int[] a) | 普通 | 数组排序,此方法被重载多次,可以对各种类型的数组进行排序 |
4 | public static int binaryScearch(int[] a, int key) | 普通 | 对排序后的数组进行检索,此方法被重载多次,可以各种类型的数组进行搜索 |
5 | public static String toString(int[] a) | 普通 | 输出数组信息,此方法被重载多次,可以输出各种数据类型的数组 |
例:操作Arrays类
package charjava;
import java.util.*;
public class java48 {
public static void main(String[] args) {
int[] temp = {3, 14, 25, 77, 27, 118, 9, 11}; // 声明一个整型数组
Arrays.sort(temp); // 数组排序
System.out.println("排序后的数组");
System.out.println(Arrays.toString(temp)); // 以字符串输出数组
int point = Arrays.binarySearch(temp, 25); // 检索数据位置
System.out.println("元素'25'的位置在:" + point);
Arrays.fill(temp, 25); // 填充数组
System.out.println("数组填充:");
System.out.println(Arrays.toString(temp)); // 以字符串输出数组
}
}
3.12正则表达式
(1.)认识正则表达式
正则表达式可以方便对数据进行匹配,可以执行更加复杂的字符串验证、拆分、替换功能。正则表达式可以用来搜索、编辑或处理文本。
例:使用正则表达式验证
package charjava;
import java.util.regex.Pattern;
public class java49 {
public static void main(String[] args) {
String str = "1234567890"; // 此字符串由数字组成
if (Pattern.compile("[0-9]").matcher(str).matches()) { // 使用正则表达式验证
System.out.println("是由数字组成!");
}
else {
System.out.println("不是由数字组成!");
}
}
}
(2.)Pattern类和Mactcher类
- Pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
- Mactcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。
常用正则规范
序号 | 规范 | 描述 | 序号 | 规范 | 描述 |
1 | \\ | 表示反斜线(\)字符 | 9 | \w | 表示字母、数字、下划线 |
2 | \t | 表示制表符 | 10 | \W | 表示非字母、数字、下划线 |
3 | \n | 表示换行 | 11 | \s | 表示所有空白字符(换行、空格等) |
4 | [abc] | 字符a、b、c之外的任意字符 | 12 | \S | 表示所有非空白字符 |
5 | [^abc] | 除了a、b、c之外任意字符 | 13 | ^ | 行的开头 |
6 | [a-zA-Z0-9] | 表示由字母、数字组成 | 14 | $ | 行的结尾 |
7 | \d | 表示数字 | 15 | . | 匹配除换行符之外的任意字符 |
8 | \D | 表示非数字 |
数量表示(X表示一组规范)
序号 | 规范 | 描述 | 序号 | 规范 | 描述 |
1 | X | 必须出现一次 | 5 | X{n} | 必须出现n次 |
2 | X? | 可以出现0次或1次 | 6 | X{n,} | 必须出现n次以上 |
3 | X* | 可以出现0次、1次或多次 | 7 | X{n,m} | 必须出现n~m次 |
4 | X+ | 可以出现1次或多次 |
逻辑运算符(X、Y表示一组规范)
序号 | 规范 | 描述 | 序号 | 规范 | 描述 |
1 | XY | X规范后跟着Y规范 | 3 | (X) | 作为一个捕获组规范 |
2 | X|Y | X规范或Y规范 |
Pattern类的常用方法
序号 | 方法 | 类型 | 描述 |
1 | public static Pattern compile(String regex) | 普通 | 指定正则表达式规范 |
2 | public Matcher matcher(CharSequence input) | 普通 | 返回Matcher类实例 |
3 | public String[] split(CharSequence input) | 普通 | 字符串拆分 |
Matcher类的常用方法
序号 | 方法 | 类型 | 描述 |
1 | public boolean mathces() | 普通 | 执行验证 |
2 | public String replaceAll(String replacement) | 普通 | 字符串替换 |
例:验证一个字符串是否是合法的日期格式
package charjava;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class java50 {
public static void main(String[] args) {
String str = "1983-07-27";
String pat = "\\d{4}-\\d{2}-\\d{2}"; // 定义验证规则
Pattern p = Pattern.compile(pat); // 实例化Pattern类
Matcher m = p.matcher(str); // 验证字符串内容是否合法
if (m.matches()) { // 使用正则验证
System.out.println("日期格式合法!");
}
else {
System.out.println("日期格式不合法!!");
}
}
}
例:按照字符串的数字将字符串拆分
package charjava;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class java52 {
public static void main(String[] args) {
String str = "A1B22C333D4444E55555F";
String pat = "\\d+"; // 定义验证规则
Pattern p = Pattern.compile(pat); // 实例化Pattern类
String s[] = p.split(str); // 进行字符串拆分
for (int x = 0; x<s.length; x++) {
System.out.println(s[x] + "\t"); // 输出
}
}
}
例:将全部数字替换成"_"
package charjava;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class java51 {
public static void main(String[] args) {
String str = "A1B22C333D4444E55555F";
String pat = "\\d+"; // 定义验证规则
Pattern p = Pattern.compile(pat); // 实例化Pattern类
Matcher m = p.matcher(str); // 实例化Matcher类
String newString = m.replaceAll("_"); // 替换数字
System.out.println(newString);
}
}
3.13String类对正则表达式的支持
String类的正则支持
序号 | 方法 | 类型 | 描述 |
1 | public boolean matches(String regex) | 普通 | 字符串匹配 |
2 | Public String replaceAll(String regex,String replacement) | 普通 | 字符串替换 |
3 | public String[] split(String regex) | 普通 | 字符串拆分 |
例:使用String类修改之前的操作
package charjava;
public class java53 {
public static void main(String[] args) {
String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+", "_");
boolean temp = "1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}");
String s[] = "A1B22C333D4444E55555F".split("\\d+");
System.out.println("字符串替换操作:" + str1);
System.out.println("字符串替换验证:" + temp);
System.out.println("字符串拆分:" );
for (int x = 0; x < s.length; x++) {
System.out.println(s[x] + '\t');
}
}
}