第4章 数组和字符串
1. 数组(课本69-73页,综合应用)
数组是连续存储区域的命名集合,这些存储区域彼此相邻,存放着相同类型的数据元素。
一维数组(见课本69-71页)
(1)声明一维数组
一维数组变量的声明格式有如下两种:
数组元素的数据类型 [ ] 数组名;
数组元素的数据类型 数组名[ ];
(2)创建一维数组
Java数组是引用类型,可以通过new 操作符来创建;在创建一个数组时必须指明数组的元素类型和它的长度。
先声明后创建
格式:数组名 = new 数组元素类型[元素个数]
示例:
char[ ] c; // 声明数组
c = new char[5]; // 创建数组,并分配内存
在声明时创建
示例:
char[ ] c = new char[5];
对于较小的数组,可以使用直接赋值创建,即在声明数组时赋给它初值。数组初始化表达式写成一组用逗号分开的扩在花括号里的表达式。
例如:int arr[ ] = {2, -9, 15, -2, 0, 80, 7};
char c[ ] = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’};
(3)引用一维数组元素
数组的每个元素通过它在数组里的位置来引用:数组名 [ 下标 ],例如:arr[7]
数组下标必须是0到N-1之间的整数,或值在0到N-1之间的整数表达式,其中N是数组里元素的个数。例如:arr[7]、arr[i+j](其中i=1, j=6)
使用一个不在0到N-1范围内的下标值系统将发生运行时异常,这是由于Java运行系统会对数组下标自动进行范围越界检查。例如:arr[-1]、arr[15]
多维数组(见课本71-73页)
(1)声明二维数组
声明二维数组的形式有以下三种:
数据元素类型 数组名[ ][ ]
数据元素类型[ ][ ] 数组名
数据元素类型[ ] 数组名[ ]
(2)创建二维数组
创建二维数组的方法也有多种:
l 直接分配(适用于平衡二维数组,即矩阵)
格式:类型 数组名[ ][ ] = new 类型[长度1][长度2];
例如: double rainfall[ ][ ] = new double[12][31];
l 从最高维开始,分别对每一维分配不等长空间(适用于非平衡数组)
例如: int a[ ][ ] = new int[3][ ];
int a[0] = new int[4];
int a[1] = new int[5];
int a[2] = new int[2];
l 直接赋值创建(适用于元素较少的数组)
例如:int[ ][ ] x = { {5,6,7},
{8,9,10,11},
{18,19,20,15},
{2,9}
};
(3)引用二维数组元素
书中示例的非平衡二维数组x中,x[2][3]值为15
(4)使用二维数组要注意的问题
二维数组名[下标1]是一维数组。
二维数组名.length是二维数组的子数组个数;二维数组名[下标1].length是指定子数组的元素个数。
2. 字符串(课本73-80页,综合应用)
字符串常量(见课本73页)
双引号括起来的字符序列。示例:“student”、“你好” 或“123.456”
字符串声明和创建(见课本73-74页)
String name1 = new String( );
String name2 = new String(“Hello World”);
char a[ ] = {‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’};
String name3 = new String(a);
String name4 = new String(a,2,4);
字符串基本操作(见课本74-77页)
(1)字符串连接
String s1 = “sweet”;
String s2 = new String( “you ” + “are ” + s1);
(2)获取字符串长度
方法:public int length()
功能:返回此字符串的长度
(3)字符串前缀或后缀的比较
方法:public boolean startsWith(String prefix)
功能:测试此字符串是否以指定的前缀开始
方法:public boolean endsWith(String suffix)
功能:测试此字符串是否以指定的后缀结束
(4)比较两个字符串是否相同
方法:public boolean equals(Object obj)
功能:比较两个引用变量是否引用同一个对象,例如x.equals(y),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
方法:public boolean equalsIgnoreCase(String anotherString)
功能:将此 String 与另一个 String 比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。
方法:public int compareTo(String str)
功能:按字典顺序比较两个字符串的大小。该比较基于字符串中各个字符的 Unicode 值。如果此 String 对象小于参数字符串,则返回一个负整数。如果此 String 对象大于参数字符串,则返回一个正整数。如果这两个字符串相等,则返回 0。
方法:public int compareToIgnoreCase(String str)
功能:按字典顺序比较两个字符串,不考虑大小写。
(5)字符串检索
String的实例方法indexOf( ) 可以 用于在字符串中查找一个字符或子串的索引位置。indexOf( )方法在一个String里从左到右查找一个字符或子串,它有几种版本:
public int indexOf( String string );
public int indexOf( String string, int startingIndex );
(6)取字符串的子串
方法substring( )可以用 来从一个String里检索一个字符子串。
public String substring( int startIndex )
例如:
String str = “HelloWorld”;
str.substring( 5 ); // “World”
str.substring( 9 ); // ”d”
(7)替换字符串中的某字符得到一个新字符串
方法:public String replace(char oldChar, char newChar)
功能:返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
(8)去掉前后空格得到一个新字符串
方法:public String trim()
功能:返回字符串的副本,去掉前后空白。
(9)基本类型值的字符串表示
String的类方法valueOf( )用于把某种基本类型的值转换成一个String对象。
(10)字符串得到基本类型对象
每种基本类(包装类,除Character)都有类方法能将字符串转换成基本类的对象,形如:
public static Type valueOf(String s)
其中,Type代表任何基本类,包括Boolean、Integer、Double等。
(11)字符串得到基本类型值
每种基本类(包装类,除Character)都有类方法能从字符串中解析出基本类型的值,形如:
public static type parseType(String s)
其中,type代表任何基本数据类型,包括boolean、int、double等,Type代表相应的包装类。
StringTokenizer类(见课本77-78页)
java.util.StringTokenizer类用来把字符串分解为标记。
常用构造方法1:
public StringTokenizer(String str)
//为指定字符串构造一个 string tokenizer。使用默认的分隔符集 “ \t\n\r\f”,即:空格字符、制表符、换行符、回车符和换页符。
常用构造方法2:
public StringTokenizer(String str, String delim)
//为指定字符串构造一个 string tokenizer。delim 参数中的字符都是分隔标记的分隔符。
常用方法:
public int countTokens()
// 返回使用当前分隔符集的字符串中剩余的标记数
public String nextToken()
//返回此 string tokenizer 的下一个标记。
public boolean hasMoreElements()
//测试此 string tokenizer 的字符串中是否还有更多的可用标记。如果此方法返回 true,那么后续调用无参数的 nextToken 方法将成功地返回一个标记。
字符串与字节数组(见课本78-79页)
可以使用String构造方法,利用字节数组创建字符串:
public String(byte[ ] bytes)
//通过使用默认字节字符对应表,由字节数组构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。
public String(byte[ ] bytes, int offset, int length)
//通过使用默认字节字符对应表,由字节数组起始位置offset开始取length个字节构造一个新的 String。
String类也提供实例方法将字符串转化为字节数组:
public byte[] getBytes()
// 使用默认字节字符对应表将字符串转化为字节数组
对象的字符串表示(见课本79-80页)
根类Object中定义了实例方法
public String toString()
此方法的功能描述为:返回该对象的字符串表示。