Java程序设计精讲四 第五章 数组和字符串1
1 数组
1.1. 数组的声明
1.1.1. 一维数组的定义
格式1∶类型 数组名[ ];
其中,类型是数组元素的类型。数组名为合法的标识符,[]指明定义的是一个数组类型变量。
格式2:类型[] 数组名;
左面是类型部分,右面是变量名,与其他类型声明的格式一致。Java中没有静态的数组定义。
1.1.2. 定义类类型的数组
1
2
Date dateArray[ ] ;
Point points[ ];
这两行声明的数组,其元素都是类类型的,dateArray的每个元素都是类型Date的,points的每个元素都是类型Point的。
注意∶在数组定义时并不会为数组分配内存,声明没有创建数组,声明的数组名只是引用变量,用来指向一个数组。
1.2. 创建数组
初始化的过程就是数组的创建过程。数组的初始化分为静态初始化 和 动态初始化。
1.2.1. 静态初始化
就是在定义数组的同时给数组元素赋初值。静态初始化使用一对大括号将初值括起来,每个元素对应一个引用。
1
2
3
4
5
int intArray[] ={1,2,3,4}//定义了一个含有4个元素的int型数组
double[ ] heights ={4.5,23.6,84.124,78.2,61.5};//定义了一个含有5个元素的double型数组
boolean [ ] tired ={true, false, false, true};//定义了一个含有4个元素的boolean型数组
char vowels[ ] ={ 'a' ,'e' , i' , 'o' ,'u'};//定义了一个含有5个元素的char型数组
String names[ ] ={“Georgianna”, "Jen”," Simon” ," Tom”};//定义一个字符串数组
1.2.2. 动态初始化
使用运算符new为数组分配空间,这和所有对象是一样的。数组声明的方括号中的数字表示数组元素个数。 创建格式: 类型 数组名[ ]=new 类型[数组大小];
类型[] 数组名=new 类型[数组大小];
1
2
3
4
5
6
String names [ ];
names = new String[4];
names[0] = "Georgianna";
names[1] = "Jen";
names[2] ="Simon";
names[3]="Tom";
1.2.3. 类类型的数组的空间分配的步骤︰
先创建数组本身:
类型 数组名[]=new 类型[数组大小];
分别创建各个数组元素︰
1 2 3
数组名[0] = new类型(初值表); //... 数组名[数组大小-1]= new 类型(初值表);
1.3. 访问数组元素
在Java中,数组下标从0开始,数组中的元素个数length是数组类中唯一的数据成员变量。使用new创建数组时系统自动给length赋值。数组一旦创建完毕,其大小就固定下来。
元素的引用格式为∶
数组多[下标]
其中,下标的范围是0~length-1下标可以是整型常数或表达式。1 2 3 4 5 6 7
// 数组初始化示例: double[] heights ={4.5,23.6,84.124,78.2,61.5}; String[] names= {"Bili" ,"Jennifer" , "Joe"}; System.out.printIn( heights.length); //打印5 System.out.printIn(names.length); //打印3 names[1] = null; //擦掉了值“Jennifer" System.out.println( names.length); //仍打印3
1.4. 多维数组
1.4.1. 多维数组的定义
一般来讲,n维数组是n-1维数组的数组。声明多维数组时使用类型及多对方括号。 定义格式∶
类型 数组名[][];
类型 [][]数组名;
类型[] 数组名[ ];
1
int intArray[][]; //声明了二维数组intArray。
1.4.2. 多维数组的初始化
静态初始化
在定义数组的同时为数组元素赋初值。
1 2
// 数组intArray是一个3行2列的数组。 int intArray[][] = { {12,3},{1,5},{3,4} };
动态初始化
直接分配 直接为每一维分配空间,声明数组时,给出各维的大小。
二维数组初始化
格式如下∶
类型 数组名[][]= new 类型[数组第一维大小][数组第二维大小];
1
int a[][]=new int[2][3]; //声明了一个2行3列的二维数组。
按维分配 从最高维起(而且必须从最高维开始),分别为每一维分配内存。创建二维数组的一般格式为:
注意:1 2 3 4 5
类型 数组名[][]= new 类型[数组第一维大小][]; 数组名[0] = new 类型[数组第二维大小]; 数组名[1]= new 类型[数组第二维大小]; ... 数组名[数组第一维大小-1] = new 类型[数组第二维大小];
如果创建数组时第二维大小是一样的,则创建的是一个矩阵数组。
1.4.3. 多维数组的引用
- 二维数组的引用方式为︰
数组名[第一维下标][第二维下标]
数组下标也称为索引,它们都可以是整型常数和表达式,都是从0开始。第一维也称为行,第二维也称为列。 - 二维数组也有length属性,但它只表示第一维的长度。
- 复制数组:System类中提供了一个特殊的方法
arraycopy()
。
2 字符串类型
字符串是由有限个字符组成的序列,Java中的字符串是一个对象。 Java的标准包java.lang中封装了String类和StringBuffer类,可以方便地处理字符串。
- String类用于处理不变字符串。
- StringBuffer类用于处理可变字符串。
2.1. 字符串的声明
字符串:是内存中连续排列的0个或多个字符。
不变字符串是指字符串一旦创建,其内容就不能改变。使用String类
对于那些需要改变内容并有许多操作的字符串,可以使用StringBuffer类。
字符串分为常量和变量
- 字符串常量 是用双引号括起来的一串字符。系统为程序中出现的字符串常量自动创建一个String对象,创建过程是隐含的。
- 字符串变量 在使用之前要显式声明,并进行初始化。
字符串的声明
1 2
String s1; StringBuffer sb1;
2.2. 字符串的操作
tips:tipping_hand_man:
java.util包中的类StringTokenizer用于语言符号(单词)的分析。
2.2.1. String类和StringBuffer类中共有的常用方法
length():返回字符串的长度,即字符个数。
charAt( int index):返回字符串中index位置的字符。
subString(int beginIndex):截取当前字符串中从beginIndex开始到末尾的子串。
String substring(int startpoint,int end);
:startpoint是字符串的开始下标,end是截止下标。子串是从开始下标开始,至截止下标的前一个下标为止范围内的子串。[startpoint,end)
2.2.2. String类中的常用方法
- replace ( char oldChar , char newChar ):将当前字符串中出现的所有oldChar转换为newChar。
- toLowerCase()∶将当前字符串中所有字符转换为小写形式。
- toUpperCaSe()∶将当前字符串中所有字符转换为大写形式。
- concat( String str):将str连接在当前字符串的尾部。
- startsWith(String prefix):测试prefix是否是当前字符串的前缀。
- trim():去掉字符串前面及后面的空白。
- valueOf( type value):将type类型的参数value转换为字符串形式。
- String类型字符串的连接还可以使用运算符
+
来实现。
2.2.3. StringBujfer类中的常用方法
- append( String str):将参数str表示的字符串添加到当前串的最后。
- replace( int start, int end, String str):使用给定的str替换从start到end之间的子串。
- capacity():返回当前的容量。即字符串长度再加上缓冲区的大小( 16 )。
2.2.4. 字符串的比较
String类中比较方法:compareTo()(ASCII码顺序)、equals( )、equalslgnoreCase()、regionMatched()等。方法的名字反映了判定时所依据的判定条件是什么。
注意:关系运算符“==”判定两个字符串是否相等。与equals ()方法不同的是,“==”判定两个字符串对象是否是同一实例,即它们在内存中的存储空间是否相同。
1 2 3 4 5
String s = "This is a test String!"; String sCopy = "This is a test String!"; String sNew = new String("This is a test String!"); System.out.println(s == sCopy); // true 相同字符串常量,放在同一内存 System.out.println(s == sNew); // false new String()则开辟新内存
3 Vector类
3.1. 概述
Vector(向量)是java.util包提供的一个非常重要的工具类,它类似于数组,可以使用整数下标来访问各个元素,但是比数组的功能更强大。
- 首先,它是变长数组
。
- 其次,保存的元素的类型可以不一样
。
Vector类的实例中只能保存对象类型,而不能是基本数据类型,例如int类型。
- 首先,它是变长数组
Vector类包含的成员变量有3个∶
protected int capacityIncrement:增量的大小。如果值为0,则缓冲区的大小每次倍增。
protected int elementCount : Vector对象中元素的数量。
protected Object elementData[]:元素存储的数组缓冲区。
系统内部会记录Vector类实例的容量capacity,实际保存的元素个数由elementCount来记录,这个值不能大于容量值。当有元素加入到向量时,elementCount会相应增大。当向量中添加的元素超过了它的容量后,向量的存储空间以容量增值capacityIncrement的大小为单位增长,为以后新的元素加入做好准备。元素保存在数组elementData中。
3.2. Vector类的方法
3.2.1. 构造方法
常用的Vector类的3个构造方法︰
- public Vector():构造一个空向量。
- public Vector(int initialCapacity)∶以指定的初始存储容量initialCapacity构造一个空的向量Vector。
- public Vector(int initialCapacity,int capacityIncrement):以指定的初始存储容量initiaCapacity和容量增量capacitylncrement构造一个空的向量Vector。
创建Vector的实例时,要指明其中保存的元素的类型。例如︰
1
Vector < String > MyVector = new Vector < String > ( 100,50);
含义∶创建的MyVector向量序列初始有100个字符串的空间,以后一旦空间用尽则以50为单位递增,使序列中能够容纳的元素个数为150,200……
3.2.2. 添加方法
向Vector类对象中添加元素的常用方法︰
- addElement(Object obj):将新元素obj添加到序列尾部。
- insertElementAt( Object obj , int index):将指定对象obj插入到指定位置index处。
- add( int index, Object obj)∶在向量的指定位置index插入指定的元素obj。
3.2.3. 元素的修改或删除方法
- setElementAt(Object obj , int index):将向量序列index位置处的对象元素修改为obj。如果下标index是负数或超出实际元素的个数,则抛出异常AiTayIndexOutOfBoundsException。
- removeElement(Object obj):删除向量序列中第一个与指定的obj对象相同的元素,同时将后面的所有元素均前移一个位置。这个方法返回的是一个布尔值,表示删除操作成功与否。
- removeElementAt(int index):删除index位置的元素,同时将后面的所有元素均前移一个位置。如果下标index是负数或超出实际元素的个数,则抛出异常ArrayIndexOutOfBoundsException。
- removeAllElements():清除向量序列中的所有元素,同时向量的大小置为0。
3.2.4. 元素的查找方法
elementAt( int index):返回指定位置处的元素。如果下标index是负数或超出实际元素的个数,则抛出异常ArraylndexOutOfBoundsException。这个方法的返回值是Object型的对象,在使用之前通常需要进行强制类型转换,将返回的对象引用转换成Object类的某个具体子类的对象。例如:
String str =(String)myVector.elementAt(0)
。contains(Object obj):检查向量序列中是否包含指定的对象元素obj。
indexOf (Object obj , int start_index):从指定的start_index位置开始向后搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回 -1。
lastIndexOf(Object obj, int start_index)∶从指定的 start_index位置开始向前搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回-1。
。