基于《java2实用教程》的java知识点复习整理【 第八章——常用实用类】

第八章——常用实用类

一、知识结构框架

基于《java2实用教程》的java知识点复习整理【 第八章——常用实用类】_第1张图片

二、知识点详解

(一)关于字符串

String类

java将String类定义为final类,所以该类无子类

1、常量对象

String常量也是对象,即字符串是String常量,被放入常量池中,受常量池的保护其中的数据在程序运行期间不允许被改变。

2、String对象
String s = new String("别骂了别骂了");
String t = new String("别骂了别骂了");

凡new运算符构造的对象都不再常量池中,所以s和t虽然实体相同,但是引用不同。

用户无法输出String对象的引用,输出的是该对象的实体,即字符串

构造方法:

  • String(char a[])
String s = new String("别骂了");
//等同于
char a[] - {
     '别','骂','了'};
String s = new String(a);
  • String(char a[],int startIndex,int count)

从字符数组中的索引startIndex开始取count个字符

3、引用String常量

String常量是对象,因此可以把String常量的引用赋值给一个String对象

String a,b;
a = "java";
b = "java";
//此处a和b具有相同的引用,则具有相同的实体
a==b;//此处为true
4、字符串的并置
String a,b,c;
a = "ja";
b = "va";
c=a+b;//此处c为"java"
5、String类的常用方法
int length();
boolean equals(String s);//判断是否与s相等
boolean startsWith(String s);//判断是够以s开始
int comparaTo(String s);//比较字符序列的大小,返回差值
boolean contains(String s);//是否包含s
int indexOf(String s);//找到该字符串第一次出现的位置(未找到返回-1)
int lastIndexOf(String s);//找到该字符串最后一次出现的位置(未找到返回-1)
int indexOf(String s,int startpoint);//从startpoint开始找,找到该字符串第一次出现的位置(未找到返回-1)
String substring(int start,int end);//获得新的String对象,从start到end。end不写表示复制到末尾
String trim();//取掉前后空格得到新的String对象
6、对象的字符串表示

即重写toString方法,也可以用super.toString调用object的toString方法。

7、字符串、字符数组、字节数组

字符串与字符数组

String s;
char[] a,c;
s.getChars(11,15,a,0);//将s从11到15的字符复制给a
c = s.toCharArray();//将s所有实体转换为字符数组存入c

字符串与字节数组

String s;
byte[] a;
a = s.getBytes();//将s中的实体存入字节数组a中
String c = new String(a,6,2);//将字节数组中的第6位开始取两位,返回新的字符串(英文占1个字节,中文两个)

字符串的加密算法

//加密
String encrypt(String sourceString,String password){
     
    char[] p = password.toCharArray();
    int n = p.length;
    char[] c = sourceString.toCharArray();
    int m = c.length;
    for(int k=0;k<m;k++){
     
        int mima = c[k] + p[k%n];
        c[k] = (char)mima;
    }
    return new String(c);
}
8、正则表达式以及字符串的替换与分解

正则表达式

特殊意义的字符:正则表达式中的元字符

image-20210427164005377
  • [xxx]:该元字符代表方括号里的任何一个字符
[abc]:代表abc中的任何一个;
[^abc]:代表除了abc以外的任何字符;
[a-zA-Z]:代表英文字母的任何一个;
[a-d]:代表a~d的任何一个;
[[]]:并【或】;
[&&[]]:交【且】;
[&&[^]]:;
  • 限定修饰符用法
待限定修饰符的模式 意义
[]? []出现0次或一次
[]* []出现0次或多次
[]+ []出现1次或多次

字符串替换

String str = "12hello567bird".replaceAll("[a-zA-Z]+","你好");
//结果为:12你好567你好
//repaceAll()返回新的,不改变原件

字符串分解

String regex = "\\D+";//表示匹配任何非数字字符序列
String difitWord[] = str.split(regex);//将非数字字符作为分隔符标记分解出str的字符序列中的单词

StringTokenizer类

不适用正则表达式分解String对象的字符串

StringTokenizer fenxi = new StringTokenizer("you are welcome");//使用默认分割标记
StringTokenizer fenxi = new StringTokenizer("you*#are*#welcome","*#");//使用自定义分割标记
while(fenxi.hasMoreTokens()){
     
    System.out.print(fenxi.nextToken);
}

Scanner类

String xxx = "电费78水费88煤气费99";
Scanner scanner = new Scanner(xxx);//创建一个Scanner对象
scanner.useDelimiter("[^0123456789.]+");//设置分隔符
int sum;
while(scanner.hasNext){
     //判断是否有下一个
    sum += sannner.nextInt;
}


Scanner scanner = new Scanner(System.in);
        char key = ' ';
        boolean loop = true;
        while (loop){
     
          key = scanner.next().charAt(0);//接收一个字符
          case 'a':
               System.out.println("输入一个数:");
               nt value = scanner.nextInt();
               break;
          case 'e':
               scanner.close();
               loop = false;
               System.out.println("程序退出");
               break;
       }

StringBuffer类

可自动调解大小的字符序列

三个构造方法:

StringBuffer();//初始容量大小为16个字符
StringBuffer(int size);//指定给该对象设定初始容量的大小
StringBuffer(String s);//在s的容量基础上再加16
//当容量不够时,该对象的容量会自动增加

方法:

StringBuffer s = new StringBuffer();
s.append(String str);//添加str
s.charAt(int n);//得到序列索引为n的字符
s.setCharAt(int n,char ch);//将n处的字符替换为ch
s.insert(int index,String str);//将参数str指定的字符序列插入到参数index指定的位置
s.reverse();//翻转字符序列
s.delete(int startIndex,int endIndex);//从当前字符序列中删除一个子字符序列(从start到end),并返回当前对象的引用
s.replace(int startIndex,int endIndex,String str);//将从start到end的序列换成str,返回当前对象的引用

(二)关于时间与日期

Date类

//时间显示
Date nowTime = new Date();
System.out.println(nowTime);

//格式化显示
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(date);

Calendar类

Calendar calendar = Calendar.getInstance();//初始化一个日历对象
calendar.get(Calendar.Month);//返回月份的整数
calendar.get(Calendar.DAY_OF_WEEK);//返回星期几的整数
calendar.getTimeInMillis();//返回毫秒计时

(三)关于数学

Math类

public static long abs(double a);  //返回a的绝对值。
public static double max(double a,double b); //返回a、b的最大值。
public static double min(double a,double b); //返回a、b的最小值。
public static double random();  //产生一个0到1之间的随机数(不包括0和1)。
public static double pow(double a,double b); //返回a的b次幂。
public static double sqrt(double a); //返回a的平方根。
public static double log(double a);  //返回a的对数。
public static double sin(double a); //返回正弦值。
public static double asin(double a);  //返回反正弦值。

BigInteger类

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 int compareTo(BigInteger val); //返回当前大整数对象与参数指定的大整数的比较结果,返回值是1、-1或0,分别表示当前大整数对象大于、小于或等于参数指定的大整数。
public BigInteger pow(int a);  //返回当前大整数对象的a次幂。
public String toString();  //返回当前大整数对象十进制的字符串表示。
public String toString(int p);  //返回当前大整数对象p进制的字符串表示。

Random类

//构造方法:
public Random();
public Random(long seed);//使用参数seek指定的种子创建一个Random对象

//随机数生成器random调用不带参数的nextInt()方法:
	       Random random=new Random();
             random.nextInt();

//返回一个0至n之间(包括0,但不包括n)的随机数 随机数生成器random调用带参数的nextInt(int m)方法(参数m必须取正整数值)例如:
random.nextInt(100);//返回一个0至100之间的随机整数(包括0,但不包括100)。

//随机得到true和false两个表示真和假的boolean值,随机数生成器random调用nextBoolean()方法,例如:
random.nextBoolean();//返回一个随机boolean值。

数字格式化

格式化模式

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

例如:"输出结果%d,%f,%d"中的%d和%f是格式符号 .

format方法返回的字符串就是“格式化模式”中的格式符被替换为它得到的格式化结果后的字符串。

例如:String s = String.format(“%.2f”,3.141592);那么s就是“3.14”.

值列表

format方法中的“值列表”是用逗号分隔的变量、常量或表达式。 例如:

String s=format("%d元%0.3f公斤%d台",888,999.777666,123); 那么,s就是"888元999.778公斤123台"。

格式化顺序

format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式化“值列表”中对应的值,而“格式化模式”中的普通字符保留原样。

例如,假设int型变量x和double型变量y的值分别是888和3.1415926,

那么对于String s = format(“从左向右:%d,%.3f,%d”,x,y,100);

字符串s就是:从左向右:888,3.142,100

格式化整数

格式符

%d:格式化为十进制

%o:格式化为八进制

%x:格式化为小写的十六进制整数

%X:格式化为大写的十六进制整数

修饰符

+:强制添加上+号

,:按千分组

数据的宽度

%8d:宽度为8,右对齐

%-8d:宽度为8,左对齐

%08d:宽度为8,右对齐,0来填充

格式化浮点数

格式符

%f:将值格式化为十进制浮点数,小数保留6位

%e:将值格式化位科学计数法的十进制浮点数

修饰符

+:格式化正数时,强制加上+

,:整数部分按千分组

限制小数位数与数据的宽度

%.nf:限制小数的位数

如:%.3f:保留三位小数

%nf:数据的宽度n,右对齐,空格填充

%-nf:数据宽度为n,左对齐,空格填充

%0nf:0填充,宽度为n,右对齐

三、题库考查知识点整理

单选:

1、String 类是final 类,不可以有子类。

2、int m =Short.parseShort(“567”);

3、程序标注的【代码】的输出结果是bird。

4、程序标注的【代码】的输出结果是你好。

5、无编译错误,在命令行执行程序:“java E I love this game”,程序输出this。

6、无编译错误,在命令行执行程序:“java E go on”,运行异常:ArrayIndexOutOfBoundsException: 2。

7、“9dog”.matches("\ddog")的值是true。12hello567 .replaceAll( [123456789]+ , @ )返回的字符串是@hello@。"\hello\n"是正确的字符串常量。

8、"\tea"是正确的字符串常量。"'hello"是正确的字符串常量。"\natural"是正确的字符串常量。

9、表达式"java".equals(“java”)的值是true。表达式"Bird".compareTo(“Bird fly”)的值是负数。表达式"I love you".contains(“you”)的值是true。

10、default966 .matches( [^bc]+[789]{1}[6]{2} )的值是true。表达式"RedBird".indexOf(“Bird”)的值是3。表达式"RedBird".indexOf(“Cat”)的值是-1。

11、Integer.parseInt(“12.9”);会触发NumberFormatException异常。表达式"bird".contentEquals(“bird”)的值是true。表达式"Bird" == "bird"的值是false。

12、表达式 3.14 .matches( [0-9]+[.]{1}[0-9]+ )的值是true。表达式"220301200210250286".startsWith(“2203”)的值是true。表达式"220301200210250286".endsWith(“286”)的值是true。

13、程序标注的【代码】的输出结果是bird。

14、程序标注的【代码】的输出结果是:你好。

15、 String str2 = new String (a); //B错误代码:不能存放数组

16、 int index = str.indexof(“BC”); //A错误代码:O要大写

17、 boolean boo= str.startWith(“Java”); //D错误代码:startsWith

18、int m = “java”.compareto(“java”); //C错误代码:To的T大写

19、 String s = str.subString(0,3); //C错误代码:subsString

20、 boolean bn = str.equal(""); //A错误代码:equals

21、 int m = str.equals(""); //A错误代码:boolean不能转换为int

22、 int n = s.length ; //D错误代码length()

多选:

1、String 类是final 类,不可以有子类。String 类在java.lang中

2、错误:String 类在java.util包中。“abc”=="abc"的值是false .“abc”.equals(“Abc”)的值是true

3、int m =Short.parseShort(“567”);

4、错误:int m =Float.parseFloat(“567”);byte m =Integer.parseInt(“2”);float m =Float.parseDouble(“2.9”);

5、“9dog”.matches("\ddog")的值是true。12hello567 .replaceAll( [123456789]+ , @ )返回的字符串是@hello@。"\hello\n"是正确的字符串常量。

6、错误:new Date(1000)对象含有的时间是公元后1000小时的时间

7、"\tea"是正确的字符串常量。"'hello"是正确的字符串常量。"\natural"是正确的字符串常量。

8、错误:"\hello"是正确的字符串常量。

9、default966 .matches( [^bc]+[789]{1}[6]{2} )的值是true。表达式"RedBird".indexOf(“Bird”)的值是3。表达式"RedBird".indexOf(“Cat”)的值是-1。

10、错误:表达式"RedBird".lastIndexOf(“Bird”)的值是4。

11、Integer.parseInt(“12.9”);会触发NumberFormatException异常。表达式"bird".contentEquals(“bird”)的值是true。表达式"Bird" == "bird"的值是false。

12、错误:表达式"Bird".equals(“bird”)的值是true。

13、表达式 3.14 .matches( [0-9]+[.]{1}[0-9]+ )的值是true。表达式"220301200210250286".startsWith(“2203”)的值是true。表达式"220301200210250286".endsWith(“286”)的值是true。

14、错误:表达式"D:/java/book".lastIndexOf("/")的值是8。

15、String对象的字符序列是不可修改的。StringBuffer对象的字符序列是可修改的。表达式"\t\nABC".length()的值是5。random.nextInt(100);//返回一个0至100之间的随机整数(包括0,但不包括100)。

16、错误:Random对象的nextInt(int n)方法随机返回[0,n]之间的一个整数

17、表达式 java88_hello_99 .matches( [a-zA-Z|0-9|_]+ )的值是true.表达式 abcdef你好 .matches( [0-9.]+ )的值是true.

18、错误:表达式 hello*? .matches( [a-zA-Z|0-9|_]+ )的值是true。表达式 hello .matches( [0-9.]+ )的值是false.

你可能感兴趣的:(java2实用教程,java,正则表达式,字符串)