Java 常用实用类(下)

目录

1.Java BigInteger类(大整数类)

2.Java Random类 

3.Java Formatter类

1.格式化模式

2.值列表

3.格式化顺序

4.Java格式化整数

1.%d,%o,%x和%X

2.修饰符

1)加号修饰符“+”

2)逗号修饰符“,”

3.数据的宽度

5.Java StringBuffer类(StringBuffer对象的创建) 

1)StringBuffer()

2)StringBuffer(int size)

3)StringBuffer(String s)

6.Java StringBuffer类的常用方法

7.Java Pattern类与Matcher类(1)

8.Java Pattern类与Matcher类(2)

9.Java Class类

1.使用Class实例化一个对象

2.获取类的有关信息


1.Java BigInteger类(大整数类)

        我们要知道,程序有时候需要处理大整数,那我们该怎么办呢?我们可以使用java.math包中的BigInteger类提供任意精度的整数运算,通过使用构造方法public BigInteger(String val)构造一个十进制的BigInteger对象。

该构造方法可以发生NumberFormatException异常,也就是说,字符串参数val中如果含有非数字字符就会发生NumberFormatException异常。

BigInteger类的常用方法如下:

1)public BigInteger add(BigInteger val)

返回当前大整数对象与参数指定的大整数对象的和。

2)public BigInteger subtract(BigInteger val)

返回当前大整数对象与参数指定的大整数对象的差。

3)public BigInteger multiply(BigInteger val)

返回当前大整数对象与参数指定的大整数对象的积。

4)public BigInteger divide(BigInteger val)

返回当前大整数对象与参数指定的大整数对象的商。

5)public BigInteger remainder(BigInteger val)

返回当前大整数对象与参数指定的大整数对象的余。

6)public int compareTo(BigInteger val)

返回当前大整数对象与参数指定的大整数的比较结果,返回值是1、-1或0,分别表示当前大整数对象大于、小于或等于参数指定的大整数。

7)public BigInteger abs()

返回当前大整数对象的绝对值。

8)public BigInteger pow(int a)

返回当前大整数对象的a次幂。

9)public String toString()

返回当前大整数对象十进制的字符串表示。

10)public String toString(int p)

返回当前大整数对象p进制的字符串表示。

下面看一个运用大整数类的使用方法,我们以大数加法这道题为例,要求计算a+b的和,但这道题目明确说明两个数字a,b数字不超过1000位,可想而知,一般的整形一定放不下,1000位的数字加法是多少亿..亿了,而常规的做法就是以数组存储数字,模拟加法进位等操作,操作起来比较麻烦。而如果运用java的大整数类,代码非常简单,如下:

import java.math.BigInteger;
import java.util.Scanner;
  
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigInteger a=sc.nextBigInteger();
        BigInteger b=sc.nextBigInteger();
        System.out.println(a.add(b));
    }
}

2.Java Random类 

尽管我们可以使用Math类调用其类方法random()返回一个0至1之间的随机数(不包括0和1),例如:

(int)(Math.random()*100)+1; //得到1至100之间的一个随机整数(包括1和100)

但是,Java提供了更为灵活的用于获得随机数的Random类,该类在java.util包中。

使用Random类的构造方法如下:

public Random();
public Random(long seed);

创建Random对象,其中第二个构造方法使用参数seed指定的种子创建一个Random对象,人们习惯地将Random对象称为随机数生成器。例如,下列随机数生成器random调用不带参数的nextInt()方法返回一个随机整数:

Random random = new Random();
random.nextInt();

如果想让随机数生成器random返回一个0至n之间(包话0但不包括n)的随机数,可以让random调用带参数的nextInt(int m)方法(参数m必须取正整数值),例如:

random.nextInt(100);

返回一个0至100之间的随机整数(包括0但不包括100)。

如果程序需要随机得到true和false两个表示真和假的boolean值,可以让random调用nextBoolean()方法,例如:

random.nextBoolean();

返回一个随机boolean值。

3.Java Formatter类

        我们都知道程序有时候需要将数字进行格式化,那什么是数字格式化呢?所谓数字格式化,就是按着指定格式得到一个字符串。

        例如,假设我们希望3.141592最多保留2位小数,那么得到的格式化字符串应当是"3.14";若是希望整数123456789按“千”分组,那么得到的格式化字符串应当是"123,456,789";如果希望数字12.3456保留3位小数,整数部分至少要显示3位,那么得到的格式化字符串应当是"012.346"。

        在JDK 1.5版本之前,程序需要使用java.text包中的相关类,比如:DecimalFormat类,对数字型数据进行格式化。JDK 1.5版本提供了更为方便的Formatter类,Formatter类提供了一个和C语言printf函数类似的format方法:

format(格式化模式,值列表)

该方法按着“格式化模式”返回“值列表”的字符串表示。

        目前,Java已经将format方法作为了String类的静态方法,因此,程序可以直接使用String类调用format方法对数字进行格式化。

1.格式化模式

format方法中的“格式化模式”是一个用双引号括起的字符序列,也就是字符串,该字符序列中的字符由格式符和普通字符所构成。

例如:"输出结果%d,%f,%d"中的%d和%f是格式符号,开始的4个汉字、中间的两个逗号是普通字符,需要注意的是,不是格式符的都被认为是普通字符,同学们可以查阅Java API中的java.util.Formatter类了解更多的格式符。format方法返回的字符串就是“格式化模式”中的格式符被替换为它得到的格式化结果后的字符串,例如:

String s = String.format("%.2f",3.141592);

那么s就是"3.14" ,因为%.2f对3.141592格式化的结果是3.14。

2.值列表

format方法中的“值列表”是用逗号分隔的变量、常量或表达式。要保证format方法“格式化模式”中的格式符的个数与“值列表”中列出的值的个数相同,例如:

String s = String.format("%d元%0.3f公斤%d台",123,456.777888,999);

那么,s就是"123元456.778公斤999台"。

3.格式化顺序

format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式化“值列表”中对应的值,而“格式化模式”中的普通字符保留原样,例如,假设int型变量x和double型变量y的值分别是123和3.1415926,那么对于:

String s = String.format("从左向右:%d,%.3f,%d",x,y,100);

那么,s就是"从左向右:123,3.142,100"。

如果不希望使用默认的顺序(从左向右)进行格式化,还可以在格式符前面添加索引符号:index$,例如,1$表示“值列表”中的第1个,2$表示“值列表”中的第2个,对于:

String s = String.format("不是从左向右:%2$.3f,%3$d,%1$d",x,y,100);

那么,s就是"不是从左向右:3.142,100,123"。

注意:如果准备在“格式化模式”中包含普通的%,在编写代码时需要连续输入两个%,例如:

String s = String.format("%d%%",89);

那么,s就是"89%"。

4.Java格式化整数

1.%d,%o,%x和%X

%d,%o,%x和%X格式符均可格式化byte、Byte、short、Short、int、Integer、long和Long型数据,其中:

%d将值格式化为十进制整数。

%o将值格式化为八进制整数。

%x将值格式化为小写的十六进制整数。

%X将值格式化为大写的十六进制整数。

例如:

String s = String.format("%d,%o,%x,%X",300,300,300,300);

那么,字符串s就是"300,454,12c,12C"。

2.修饰符

1)加号修饰符“+”

格式化正整数时,强制添加上正号,例如:%+d将123格式化为"+123"。

2)逗号修饰符“,”

格式化整数时,按“千”分组,例如:

String s = String.format("按千分组:%,d。按千分组带正号%+,d",12345678,9876);

那么,字符串s就是"按千分组:12,345,678。按千分组带正号+9,876 "。

3.数据的宽度

所谓数据的宽度就是format方法返回的字符串的长度,规定数据宽度的一般格式为"%md",其效果是在数字的左面增加空格;若为"%-md",其效果是在数字的右面增加空格。

例如,将数字10格式化为宽度为8的字符串:

String s = String.format("%8d",10);

那么,字符串s就是"      10",其长度(s.length())为8,即s在10左面添加了6个空格字符,对于:

String s = String.format("%-8d",10);

那么,字符串s就是"10      ",其长度(s.length())为8,即s在10右面添加了6个空格字符。

注意:如果实际数字的宽度大于格式中指定的宽度,就按数字的实际宽度进行格式化。

我们也可以在宽度前面增加前缀0,表示用数字0,不用空格来填充宽度左面的富余部分,例如:

String s = String.format("%08d",12);

那么,字符串s就是"00000012",其长度(s.length())为8,即s在12的左面添加了6个数字0。

5.Java StringBuffer类(StringBuffer对象的创建) 

        在前几节我们学习了String字符串对象,String类创建的字符串对象是不可修改的,也就是说,String字符串不能修改、删除或替换字符串中的某个字符,即String对象一旦创建,其实体是不可以再发生变化的,例如:

String s = new String("我喜欢散步");

其中,"我喜欢散步"为实体,不可以再发生变化。

那么这一节我们来学习一下StringBuffer类,该类能创建可修改的字符串序列,也就是说,该类的对象的实体的内存空间可以自动地改变大小,便于存放一个可变的字符序列。

例如,一个StringBuffer对象调用append方法可以追加字符序列:

StringBuffer s = new StringBuffer("我喜欢");

那么,对象s可调用append方法追加一个字符串序列:

s.append("游泳");

其中,"我喜欢游泳"为实体,实体发生变化。

StringBuffer类有三个构造方法:

1)StringBuffer()

使用第1个无参数的构造方法创建一个StringBuffer对象,那么分配给该对象的实体的初始容量可以容纳16个字符,当该对象的实体存放的字符序列的长度大于16时,实体的容量自动增加,以便存放所增加的字符。StringBuffer对象可以通过length()方法获取实体中存放的字符序列的长度,通过capacity()方法获取当前实体的实际容量。

2)StringBuffer(int size)

使用第2个构造方法创建一个StringBuffer对象,那么可以指定分配给该对象的实体的初始容量为参数size指定的字符个数,当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量自动增加,以便存放所增加的字符。

3)StringBuffer(String s)

使用第3个构造方法创建一个StringBuffer对象,那么可以指定分配给该对象的实体的初始容量为参数字符串s的长度额外再加16个字符。

6.Java StringBuffer类的常用方法

1.append方法

使用StringBuffer类的append方法可以将其他Java类型数据转化为字符串后,再追加到StringBuffer对象中。

1)StringBuffer append(String s)

将一个字符串对象追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用。

2)StringBuffer append(int n)

将一个int型数据转化为字符串对象后再追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用。

3)StringBuffer append(Object o)

将一个Object对象o的字符串表示追加到当前String-Buffer对象中,并返回当前StringBuffer对象的引用。

类似的方法还有:

StringBuffer append(long n)、StringBuffer append(boolean n)、StringBuffer append(float n)、StringBuffer append(double n)和StringBuffer append(char n)。

2.public char charAt(int n)和public void setCharAt(int n,char ch)

1)char charAt(int n)

得到参数n指定的位置上的单个字符,当前对象实体中的字符串序列的第一个位置为0,第二个位置为1,以此类推。n的值必须是非负的,并且小于当前对象实体中字符串序列的长度。

2)setCharAt(int n,char ch)

将当前StringBuffer对象实体中的字符串位置n处的字符用参数ch指定的字符替换。n的值必须是非负的,并且小于当前对象实体中字符串序列的长度。

3.StringBuffer insert(int index,String str)

StringBuffer对象使用insert方法将参数str指定的字符串插入到参数index指定的位置,并返回当前对象的引用。

4.public StringBuffer reverse()

StringBuffer对象使用reverse()方法将该对象实体中的字符翻转,并返回当前对象的引用。

5.StringBuffer delete(int startIndex,int endIndex)

delete(int startIndex,int endIndex)从当前StringBuffer对象实体中的字符串中删除一个子字符串,并返回当前对象的引用。这里startIndex指定了需要删除的第一个字符的下标,而endIndex指定了需要删除的最后一个字符的下一个字符的下标。因此,要删除的子字符串从startIndex到endIndex-1。deleteCharAt(int index)方法删除当前StringBuffer对象实体的字符串中index位置处的一个字符。

6.StringBuffer replace(int startIndex,int endIndex,String str)

replace(int startIndex,int endIndex,String str)方法将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换。被替换的子字符串由下标startIndex和endIndex指定,即从startIndex到endIndex-1的字符串被替换,该方法返回当前StringBuffer对象的引用。

7.Java Pattern类与Matcher类(1)

模式匹配就是检索和指定模式匹配的字符串,Java提供了专门用来进行模式匹配的Pattern类Matcher类,这些类在java.util.regex包中。

接下来我们来讲讲使用Pattern类和Matcher类的步骤,假设有字符串:

String input = "hello,good morning,this is a good idea";

我们想知道input从哪个位置开始至哪个位置结束曾出现了字符串good。

首先我们要建立模式对象,使用正则表达式regex做参数得到一个称为模式的Pattern类的实例pattern:

Pattern pattern = Pattern.compile(regex);

例如:

String regex = "good";
pattern = Pattern.compile(regex);

模式对象是对正则表达式的封装。Pattern类调用类方法compile(String regex)返回一个模式对象,其中的参数regex是一个正则表达式,称为模式对象使用的模式

如果参数regex指定的正则表达式有错,complie方法将抛出异常PatternSyntaxException。

Pattern类也可以调用类方法compile(String regex,int flags)返回一个Pattern对象,参数flags可以取下列有效值:

Pattern.CASE_INSENSITIVE
Pattern.MULTILINE
Pattern.DOTALL
Pattern.UNICODE_CASE
Pattern.CANON_EQ

例如:flags取值Pattern.CASE_INSENSITIVE,模式匹配时将忽略大小写。

8.Java Pattern类与Matcher类(2)

        上一节我们学习了使用Pattern类和Matcher类的第一步,建立模式对象,这一节我们继续学习第二步,得到匹配对象

得到可以检索字符串input的Matcher类的实例matcher,称为匹配对象:

Matcher matcher = pattern.matcher(input);

        模式对象pattern调用matcher(CharSequence input)方法返回一个Matcher对象matcher,称为匹配对象,参数input用于给出matcher要检索的字符串。参数input可以是任何一个实现了CharSequence接口的类创建的对象,前面学习的String类和StringBuffer类都实现了CharSequence接口。

        匹配对象matcher就可以调用各种方法检索字符串input。例如:matcher依次调用boolean find()方法将检索到input中和regex匹配的子字符串。例如:首次调用find()方法将检索到input中的第一个子字符串good,即matcher.find()检索到第一个good并返回true,这时matcher.start()返回的值是6,第一个good开始的位置, matcher.end()返回的值是10,第一个good结束的位置,matcher.group()返回good,也就是说,返回检索到的字符串。

        Matcher对象matcher可以使用下列方法寻找字符串input中是否有和模式regex匹配的子序列,regex是创建模式对象pattern时使用的正则表达式。

1)public boolean find()

        寻找input和regex匹配的下一子序列,如果成功该方法返回true,否则返回false。matcher首次调用该方法时,寻找input中第1个和regex匹配的子序列,如果find()返回true, matcher再调用find()方法时,就会从上一次匹配模式成功的子序列后开始寻找下一个匹配模式的子字符串。另外,当find方法返回true时,matcher可以调用start()方法和end方法可以得到该匹配模式子序列在input中的开始位置和结束位置。当find方法返回true时,matcher调用group()可以返回find方法本次找到的匹配模式的子字符串。

2)public boolean matches()

matcher调用该方法判断input是否完全和regex匹配。

3)public boolean lookingAt()

        matcher调用该方法判断从input的开始位置是否有和regex匹配的子序列。若lookingAt()方法返回true,matcher调用start()方法和end方法可以得到lookingAt()方法找到的匹配模式的子序列在input中的开始位置和结束位置。若lookingAt()方法返回true,matcher调用group()可以返回lookingAt()方法找到的匹配模式的子序列。

4)public boolean find(int start)

        matcher调用该方法判断input从参数start指定位置开始是否有和regex匹配的子序列,参数start取值0时,该方法和lookingAt()的功能相同。

5)public String replaceAll(String replacement)

        matcher调用该方法可以返回一个字符串,该字符串是通过把input中与模式regex匹配的子字符串全部替换为参数replacement指定的字符串得到的,需要注意的是,input本身没有发生变化。

6)public String replaceFirst(String replacement)

        matcher调用该方法可以返回一个字符串,该字符串是通过把input中第1个与模式regex匹配的子字符串替换为参数replacement指定的字符串得到的,需要注意的是,input本身没有发生变化。

9.Java Class类

        Class是java.lang包中的类,该类的实例可以帮助程序创建其他类的实例或者取得其他类的对象的内部信息。

1.使用Class实例化一个对象

        创建对象最常用的方式就是使用new运算符和类的构造方法,实际上也可以使用Class对象得到某个类的实例,步骤如下:

(1) 使用Class的类方法得到一个和某类(参数className指定的类)相关的Class对象:

public static Class forName(String className) throws ClassNotFoundException

上述方法返回一个和参数className指定的类相关的Class对象,如果类在某个包中,className必须带有包名,例如:className = "java.util.Date"。

(2) 步骤(1)中获得的Class对象调用public Object newInstance() throws InstantiationException,IllegalAccessException方法就可以得到一个className类的对象。

注意:使用Class对象调用newInstance()实例化一个className类的对象时,className类必须有无参数的构造方法。

2.获取类的有关信息

        当一个类被加载且创建对象时,和该类相关的一个类型为Class的对象就会自动创建,任何对象调用getClass()方法都可以获取和该对象相关的一个Class对象,这个Class对象调用如下的方法可以获取对象的有关信息,比如:创建该对象的类的名字、类中的方法名称、成员变量的名称等等。

Class对象经常调用的方法如下:

  • String getName()

返回类的名字。

  • Constructor[] getDeclaredConstructors()

返回类的全部构造方法。

  • Field[] getDeclaredFields()

返回类的全部成员变量。

  • Method[] getDeclaredMethods()

返回类的全部方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赔罪

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值