String\StringBuffer\StringBulid简介_包装类_Byte_Short_Integer_Long/day15

来源:互联网 发布:python字符串变成列表 编辑:程序博客网 时间:2024/06/06 14:02

字符串类:

查找子串在字符串中出现的位置,或从头开始查找,或从某个位置开始。

 

一个重要的方法:

 

判断字符串是否为空,即长度是否为0,即是否为空字符串:

空字符串的几种方式:(Test02.java)

1、 String str=””;

2、 String str = new String();

空串与null的区别:

如果一个字符串的内容为空,它同样可以进行字符串所能进行的任何操作,即类中的所有方法都可以调用;

但如果一个字符串初始化为null,则它不能调用类中的任何方法,即没有任何实际作用;

String s1 = null;

System.out.println(s1.length());

 

如果一个引用为null,则调用方法时会出现“空指针异常”。

如果这么定义了,它只能直接输出,输出为null;

因此,如果一个字符串类型的变量作为方法参数,通常情况下需要讨论这个形参是否为null值。当两个字符串进行比较时(比较是否相等或大小),要让非null字符串在前。

字符串替换功能:

 

重要的获取子串的方法:

 

字符串的剪切方法:

 

去除内容两端的空白:空格,制表符,换行符

 

在字符串类中,有一个将对象转换为字符串的静态方法valueOf()

使用此方法得到字符串的优势在无论对象是什么值,哪怕是null,照常能得到字符串;

Object obj = null;

String str = String.valueOf(obj);

System.out.println(str);

 

同样在转换对象到字符串时,可以使用toString(),但要求对象为非null

课下练习1

有一种机器配件进行编号,以KH-开头,从0000001-9999999,将所有编号进行显示。

 

课下练习2

 

找规律,定义一个方法,能够生成这样的随机字符串;

 

能够修改的字符串类:StringBuffer

 

需要掌握这个类的

append()方法

length()方法

 

一个剪切内存的方法:

 

字符串的反转方法:

 

课下练习3

如果一个正整数,正着读和倒着读大小相同,如10112021等,这样的数称为“回文数”,如果这个回文数同时又是素数,称为“回文式素数”,要求显示1000000以内的回文式素数。

 

StringBuffer类的应用场合:

当需要字符串进行不断连接操作时,如果使用String类,则会生成大量中间字符串,多数都会被丢弃,变为不可访问的垃圾,当连接较多的数据时,会极大影响效率;

因为StringBuffer是线程安全的,而且可变,如果是连接大量数据,或者对字符串进行修改时,这种场合用它比较方便;

两者的联系:当连接或修改完毕,可以直接调用toString()生成一个String对象;

StringBuilder类的应用场合:

因为该类不是线程安全的,从理论上来说,在连接或修改的效率上会低于StringBuffer,经过简单测试,效率提高也不明显。

如果某个操作需要连接或修改,那么两种字符串如何选择?

如果是局部的操作,使用不是线程安全的StringBuilder类;

如果是变量做为类字段,则使用线程安全的StringBuffer类;

 

思考题:罗列出你所知道的所有的final类?

String,StringBuffer,StringBuilder,Math,System,Scanner…

Java中编写代码,如果某个文件中,需要引用其他包中的文件,要使用import关键字将其他包中的类导入到当前包的当前文件中来,才能使用(当然是在访问级别允许的情况下),为了操作的方便,JVM预先将java.lang包中的所有类都会自动导入进来。

除了java.lang包外,编程中使用其他包中的类时,必须要显式导入。

这里说的java.lang包,编程时会隐式导入所有的类,但不包括子包中的类;

java.lang包中某些类中方法的静态导入;//完全没有意义啊

Java中数据的输入和输出,都是通过标准类库中的类来实现的;

控制台输入: Scanner  scanf()

窗体输入:

例程:例子程序

文本扫描类:java.util.Scanner

从控制台输入数据的方法:

输入字符串:

 

 

输入整数:

 

一个综合点的读取例程:从控制台上输入一个学生的信息,id,name,age

Scanner sc = new Scanner(System.in);

System.out.print("Input your id: ");

int id = sc.nextInt();

sc.nextLine(); // 用来接受回车键转换为的编码值为0的字符

System.out.print("Input your name: ");

String name = sc.nextLine();

System.out.print("Input your sex: ");

String sex = sc.nextLine();

System.out.print("Input your age: ");

int age = sc.nextInt();

String msg = String.format("[%s,%s,%s,%s]", id, name, sex, age);

System.out.println(msg);

sc.close(); // 手动释放非堆区和非栈区资源

 

包装类:

JavaC#称为“完全面向对象的编程语言”;

是否是“真正意义上的完全”?语法只支持对象,没有内置类型存在!

因为在javaC#中,都仍然支持内置基本类型的编程,如Java中有8种基本类型,在C#中,有十几种基本类型;从这个要求上来说,两者都不是完全面向对象;

符合这项要求的编程语言:smalltalk

这种语言没有大量用于开发中,一个问题就是“效率”问题。

为了解决在程序开发时,使用内置类型数据的效率问题,JavaC#对于语言本身内置类型的设计采用了不同的方法。

对于java来说,

对于内置类型,它是完全支持的;

但为了达到“面向对象编程”的要求,将每种内置类型,作为其基类型进行了包装,一个基本类型对应一个类,这样的类称为“包装类”。

byte -> Byte

char -> Character

boolean -> Boolean

short -> Short

int -> Integer

long -> Long

float -> Float

double -> Double

分析Integer这个具有代表性的包装类:

静态信息:

System.out.println("max: " + Integer.MAX_VALUE);

System.out.println("min: " + Integer.MIN_VALUE);

System.out.println("size: " + Integer.SIZE);

System.out.println("type: " + Integer.TYPE);

 

构造器new Integer(int);以整数为参数,构造一个对象;

调用对象的intValue(),可将对象转换为整数;

Integer类中最重要的方法:将整型字符串 =为整数;

 

int balance = 5000;

System.out.println("取款前的余额:" + balance);

Scanner sc = new Scanner(System.in);

System.out.print("输入取款数目:");

String moneyString = sc.nextLine();

System.out.println("你要取" + moneyString + "!");

int money = Integer.parseInt(moneyString);

balance -= money;

sc.close();

System.out.println("取款后的余额:" + balance);

 

将整数转换为2进制、8进制和16进制的方法:

 

int number = 100;

System.out.println("2进制:" + Integer.toBinaryString(number));

System.out.println("8进制:" + Integer.toOctalString(number));

System.out.println("10进制:" + number);

System.out.println("16进制:" + Integer.toHexString(number));

System.out.println();

number = -number;

System.out.println("2进制:" + Integer.toBinaryString(number));

System.out.println("8进制:" + Integer.toOctalString(number));

System.out.println("10进制:" + number);

System.out.println("16进制:" + Integer.toHexString(number));

 

课下练习4

51050,使用包装类IntegertoBinaryString()方法,转换为二进制表示,要求每个数都保证32位;

 

Integer类中带参数的toString()为方法:

 

上述的操作都是基于jdk4.0的基础上进行操作,5.0版本之后,对于包装类提供更加方便的操作,“自动装箱”和“自动拆箱”的功能。

 

课下练习5

将包装类Byte,Short,Long的四个静态属性,进行查询。

要注意到每个类都有parseType(String)的方法;

 

课下练习6

预习实数的两个包装类FloatDouble,注意它们的众多静态字段,这两个类中提供了计算单精度和双精度数据在内存中的存储形式。

0 0
原创粉丝点击