第4章 数组与字符串 学习目标 本章要点 上机练习 习 题.

Slides:



Advertisements
Similar presentations
主要内容 Java 的常用包 Java 的常用包 “ == ” 和 “ equals ” 的用法 “ == ” 和 “ equals ” 的用法 基本数据类型与引用类型 基本数据类型与引用类型 String 和 StringBuffer String 和 StringBuffer 对象的克隆( clone.
Advertisements

1 第 10 章 字串. 2 字串的產生  其中 StringBuffer 與 StringBuilder 類別會在 10-3 節中介 紹。底下就來看看如何透過前 4 個建構方法產生字串: 這 是 個 測 試 字 串 4ED6 test 4ED6 test[0] test[1] test[2] test[3]
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
第五章 字符串.
Chapter 6 字串與時間處理.
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
類別與物件 Class & Object.
再回首: Java关键字 数据类型:byte boolean char double float int long short ,
第九章 字符串.
JAVA 网络编程基础.
程設一.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
第二章 C# 基础知识.
常用工具类.
Java 第28讲:建立删除文件 主讲教师:李焱 讲师.
第十八章 鍵盤與電容式觸控介面應用實作 讀取鍵盤輸入 按鍵偵測與掃描原理 認識Arduino的String(字串)程式庫
Classes Lecturer: 曾學文.
2018/11/22 Java语言程序设计-程序流程 教师:段鹏飞.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
零基础学编程(C#) Leo Duan 主讲.
Ch13 集合與泛型 物件導向程式設計(2).
本單元介紹何謂變數,及說明變數的宣告方式。
2018/11/27 Java语言程序设计-程序流程 教师:段鹏飞.
JAVA程序设计 第5章 深入理解JAVA语言----补充.
程式設計實作.
抽象类 File类 String类 StringBuffer类
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
Java程序设计 第9章 继承和多态.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
4.1 一維陣列 4.2 for(:) 迴圈 4.3 動態陣列 4.4 二維陣列 4.5 非矩形陣列
辅导课程十三.
C++程序设计 string(字符串类) vector(容器类).
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
集合框架和泛型(一).
Java程序设计 第2章 基本数据类型及操作.
3.7 Java的工具类.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
第三章 C# 基础知识.
第7章 繼承/多型/介面 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
2.1 Java语法基础 2.2 Java 流程控制 2.3 数组 2.4 字符串
软件测试 (四)静态测试与动态测试.
Java程序设计 第8章 字符串和文本I/O.
第二章Java基本程序设计.
第二章 Java基本语法 讲师:复凡.
Java變數 2014/6/24.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
Review 1~3.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
變數、資料型態、運算子.
第2章 Java语言基础.
C++程序语言设计 Chapter 14: Templates.
第 5 章 常用类的使用 伍孝金
第二章 Java基础语法 北京传智播客教育
Summary
Presentation transcript:

第4章 数组与字符串 学习目标 本章要点 上机练习 习 题

学习目标 数组与字符串是Java语言中非常重要且功能强大的对象,其作用渗透到程序设计的各个方面,是读者继续深入学习必不可少的基本知识。本章主要介绍了数组的概念,以及数组函数和向量类,讲解了数组和向量类的使用,还介绍了字符串String类和StringBuffer类,通过示例详细讲解了字符串的常用方法。让读者熟练掌握数组和字符串的特点与使用方法。

本章要点 一维数组和多维数组的概念 数组的声明、创建和初始化 数组函数的使用 String类和StringBuffer类字符串 字符串的常用方法

数 组 数组作为一种符合数据类型广泛应用于数据运算和图形程序设计中。 一维数组与多维数组 数组函数的使用 向量类 数 组 数组作为一种符合数据类型广泛应用于数据运算和图形程序设计中。 一维数组与多维数组 数组函数的使用 向量类 应用举例——数组与向量类的使用

一维数组与多维数组 数组有一维和多维两种形式,下面将详细介绍两种数组的使用方法。 一维数组的声明 一维数组的创建 数组的初始化 多维数组

一维数组的声明 数组是具有相同类型的元素按照顺序组成的一种复合数据类型。通过一个整数下标,可以访问其中的每一个值,下标从0开始排序,如果一个数组的长度为4,那么各元素序号为0、1、2和3。但是在Java中定义数组时候,不允许直接指定数组的大小。

一维数组的声明 根据这个定义,可以得出数组的特点:数组的所有元素是同一类型,各个元素是有顺序的,每个元素通过数组名和数组下标来表示。 一维数组的声明格式为: Type arrayName[ ]; 或者 type [ ] arrayName;

一维数组的声明 其中,type为该数组的数据类型,可以声明任何类型的数组──简单类型或类类型。ArrayName为数组名。

一维数组的声明 上述这种将方括号置于变量名之后可以声明数组的格式,是用于C、C++和Java编程语言的标准格式。有些观点认为这种格式会使声明的格式复杂难懂,因而,Java编程语言允许一种替代的格式,该格式中的方括号位于变量名的左边。

一维数组的声明 这样的结果可以认为类型部分在左,而变量名在右,上述两种格式并存,可以选择任何一种作为习惯的方式。当数组声明的方括号在左边时,该方括号可应用于所有位于其右的变量。

一维数组的创建 Java中所有数据类型都在定义时自动为其分配内存空间,但数组必须在声明后再经过创建数组这一步骤才能使用。创建数组是指在声明数组之后为数组分配内存空间,同时对数组元素进行初始化。创建数组有两种方式:

一维数组的创建 1)使用关键字new创建数组 使用关键字new来为一个已经声明的数组分配实际的内存空间。 其格式如下: arrayName = new type[arraySize ]; 这里,arraySize是指明数组的实际长度。

一维数组的创建 char array1[] = new char 20; 这条语句相当于以下两条语句 char array1[]; 而对于类类型数组的创建要多理解

一维数组的创建 2)直接指定初始值的方式创建数组 除使用关键字new创建数组以外,还可以以赋值的形式创建数组。

一维数组的创建 其格式如下: int I[]={1,2,3,4,5}; 这条语句定义了一个包含5个元素的整型数组,同时又指定了元素的初始值,并为其创建了5个元素的存储区。

一维数组的创建 【例4-1】 一维数组的声明和创建(光盘:\源文件\第4章\例4-1.txt)。

数组的初始化 数组初始化是保证系统安全的基础,变量绝不能在未初始化的状态下使用。 当创建一个数组时,即为数组分配了内存空间,每个元素都被初始化,数值类型的数组元素被自动初始化为0,布尔类型的数组元素被自动初始化为false,引用类型的数组元素被自动初始化为null。

数组的初始化 对数组的初始化也可以在定义数组的同时进行。 另一方面,数组元素的范围也是非常重要的,用来指示单个数组元素的下标必须总是从0开始,且保持在合法范围之内——大于或等于0,且小于数组长度。任何访问在上述界限之外的数组元素的行为都会引起运行时出错。

数组的初始化 【例4-2】 用冒泡排序法将数组中的元素按从小到大的顺序排列(光盘:\源文件\第4章\例4-2.txt)。 冒泡排序法将数组中两个相邻的元素进行比较,并总是将小的元素交换到前面。

例4-2运行结果

多维数组 Java并不直接支持多维数组,所以多维数组的声明是通过对一维数组的嵌套来完成的,即使用“数组的数组”的方式来声明多维数组。这里我们首先来看二维数组。

多维数组 1)二维数组 一个二维数组的声明格式为: type arrayName[ ] [ ] ;

多维数组 与一维数组一样,多维数组对数组元素没有分配任何的空间,在声明后,必须使用关键字new来为其分配内存空间,然后才能访问里面的元素。多维数组有以下方法来分配空间。

多维数组 直接分配每一维的空间。 必须从最高维开始,由高到低,分别为每一维分配内存空间。 2)多维数组 Java采用“数组的数组”声明多维数组,使处理多维数组更灵活。多维数组可以不是矩形

多维数组 显然,这种多维数组是“不整齐”的,所以在声明和创建多维数组时候,不一定要指定每一维的元素个数。上述数组yanghui[][]的高维各元素由于包含不同个数的低维元素,所以右边的方括号中实际无法确定某个数值。

多维数组 因此,在多维数组的声明和创建时候,数组最前面的一维或多维必须指定元素的个数,后面的方括号中可以不指定元素个数。 以下写法是允许的: int arrayDim[][][]=new int[3][][]

多维数组 但以下语句是错误的: int arrayDim [][]=new int[][][3]

多维数组 【例4-3】 二维数组的使用——矩阵相乘(光盘:\源文件\第4章\例4-3.txt)。 矩阵A(m,n)和B(n,1)相乘得到矩阵C(m,1),矩阵C的每个元素为Cij=aik*bkj(i=1,2,...,m,j=1,2...,n)

例4-3运行结果

数组函数的使用 在系统中很多关于数组的函数可以直接调用,下面将介绍几种常用的数组函数。 数组复制System.arraycopy() 数组排序Arrays.sort()

数组复制System.arraycopy() Java语言在System类中提供了一种特殊的方法复制数组,该方法被称作arraycopy()。 数组复制的基本格式为: public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

数组复制System.arraycopy() 【例4-4】 数组的复制,将数组a1的前4个元素赋给数组b1(光盘:\源文件\第4章\例4-4.txt)。

数组排序Arrays.sort() ArraysSort()将数组中的元素按从小到大的顺序排列,结果仍然放在源数组中。 【例4-5】 将数组a1按升序排列,并显示排序结果(光盘:\源文件\第4章\例4-5.txt)。

类“test4_5”运行结果

向量类 向量类Vector是Java.util包提供的一个工具类,它是允许不同类型元素共存的变长数组,具有比数组更强大的功能。每个向量类的对象都可以表达一个完整的数据系列,同时,向量类还封装了许多有用的方法来操作和处理这些数据。向量类对象所表达的序列元素的个数是可变的,可以使用向量类实现变长数组。

向量类 向量类可为工作的各种元素类型的动态数组提供方法,如类继承关系。

向量类 向量类的构造函数 向量类的变量 向量类的基本方法

向量类的构造函数 向量类有如下3种构造函数。 public Vector():构造一个空向量。 public Vector(int initialCapacity):构造一个具有存储容量的空向量。 public Vector(int initialCapacity,int capacityInctrment):构造具有存储容量和增加量的空向量。

向量类的变量 向量类包含如下3种变量。 protected int capacityIncrement:增加量,如为0,则每次需要增加时,缓冲区的大小成倍。

向量类的变量 protected int elementCount:缓冲区中元素的数量。 rotected Object elementData[]:元素被贮存的缓冲区。

向量类的基本方法 下面是向量类中的一些方法,可以参照Java API查看该方法的描述。 public final int size():返回向量中元素的数量。 public final boolean contains(Object elem):如果指定对象是收集的值,返回真。

向量类的基本方法 public final int indexOf (Object elem):从起始位置搜索指定的对象,然后将一个索引返回到其中(或,如果元素未找到为-1)。 public finalsynchronized Object elementAt (int index):在指定的索引中返回元素。

向量类的基本方法 public final synchronized void setElementAt (int index):在指定索引中以指定对象替代指定元素。 public final synchronized void removeElementAt (int index):删除指定索引中的元素。

向量类的基本方法 public final synchronized void addElement (Object obj):附加指定对象作为向量的最后元素。 public final synchronized void insertElementAt (Object obj,int index):插入指定对象作为指定索引中的一个元素,上移具有同等或更大索引的所有元素。

应用举例——数组与向量类的使用 【例4-6】 Vector类的使用(光盘:\源文件\第4章\应用举例MyVector.txt)。

字 符 串 Java语言将字符串作为对象来处理,字符串及相关操作都被封装在Java.lang包中的String类和StringBuffer类之中。 String类 StringBuffer类 字符串的常用方法 应用举例——字符串操作的综合应用

String类 String类用于比较两个字符串、查找串中的字符及子串、字符串与其他类型的转换,String类对象的内容初始化后不能改变。 字符串的创建

String类构造函数 String类有许多构造函数,下面将介绍主要的5个。 public String(String value):生成一个空串。 public String(char value[]):生成一个字符数组。

String类构造函数 public String(char value[], int startIndex, int numChars):生成一个字符串,这个字符串从字符数组value[]中提取,即从value[]数组的startIndex位置开始提取字符,共提取numChars个字符组成一个字符串。

String类构造函数 public String(byte ascii[],int hiByte):以字节数组形式生成一个字符串,数组中存放字符串中各字符对应的ASCII码。

String类构造函数 public String(byte ascii[], int hiByte, int startIndex, int numChars):以字节数组形式生成一个字符串,这个字符串从字节数组ascii[]的startIndex位置开始提取字符,共提取numChars个字符组成一个字符串。

字符串的创建 String类不能派生子类,也就是说String类不能被其他类继承,另外,即使程序中不使用new关键字,Java编译器也能从String类生成一个对象。 String s=”Hello world!”;

字符串的创建 该语句中没有使用new关键字,但是仍然生成了一个字符串对象s。这也是String类的特点。 在Java语言中,可以隐式或显式地创建字符串对象。

字符串的创建 1)隐式地创建字符串对象 对于隐式地创建字符串对象,可以使用双引号来设置一个String语句,Java将自动创建字符串对象。

字符串的创建 2)显式地创建字符串对象 3)使用已创建的字符串创建另一个字符串 4)由字符数组创建一个字符串对象 5)提取字符数组的部分字符创建一个字符串对象

StringBuffer类 StringBuffer类用于内容可以改变的字符串,可将其他类型的数据增加、插入到字符串中,也可翻转字符串的内容。 通过类StringBuffer的构造方法可生成可变的字符串对象。格式如下:

StringBuffer类 Sing strObj = new StringBuffer(); String strObj = new StringBuffer(int num); String strObj = new StringBuffer(String str); 参数num为字符串缓冲区的初始长度,参数str给出字符串的初始值。

字符串的常用方法 下面分别对字符串的常用方法进行介绍。 Length方法 Equals方法 equalslgnorCase方法 toUpperCase和toLowerCase方法

字符串的常用方法 Replace方法 Contact方法 compareTo和compareTolgnoreCase方法 Substring方法 public int indexOf方法

Length方法 使用String类中的length()方法可以获取一个字符串的长度。

Equals方法 字符串对象调用String类中的public Boolean equals(String s)方法,比较当前字符串对象的实体是否与参数指定的字符串s的实体相同。

equalslgnorCase方法 比较当前字符串对象与参数指定的字符串是否相同,比较时可以忽略大小写。

toUpperCase和toLowerCase方法

Replace方法 Replace可将给定字符串中出现的所有特定字符oldChar替换成指定字符newChar,形成新的字符串。

Contact方法 contact(String otherStr)可将当前字符串和给定字符串otherStr字符串连接起来,形成新的字符串。

compareTo和compareTolgnoreCase方法 字符串对象可以使用String类中的public compareTo(String s)方法按字典顺序与参数s指定的字符串比较大小。如果当前字符串与s相同,该方法返回0;如果当前字符串对象大于s,该方法返回正值;如果小于s,该方法返回负值。

compareTo和compareTolgnoreCase方法 按字典顺序比较两个字符串还可以使用public compareTolgnoreCase(String s)方法,该方法可以忽略大小写。

Substring方法 substring(int beginIndex)可从开始位置beginIndex开始一直取值到最后一个字符,形成新的字符串。 subString(int beginIndex, int endIndex) 从开始位置beginIndex开始一直取到结束位置endIndex的字符,形成新的字符串。

public int indexOf方法 要搜索指定字符串出现的位置,通常有以下几种方法。 public int indexOf(String s):字符串调用该方法从当前字符串的头开始检索字符串s,并返回首次出现s的位置。如果没有检索到字符串s,该方法返回值为-1。

public int indexOf方法 public int indexOf(String s,int starpoint):字符串调用该方法从当前字符串的starpoint处开始检索字符串s,并返回首次出现s的位置。如果没有检索到字符串s,该方法返回值为-1。

public int indexOf方法 public int lastIndexOf(String s):字符串调用该方法从当前字符串的头开始检索字符串s,并返回最后出现s的位置。如果没有检索到字符串s,该方法返回值为-1。

public int indexOf方法 public int lastIndexOf(String s,int starpoint):字符串调用该方法从当前字符串的starpoint处开始检索字符串s,并返回最后出现s的位置。如果没有检索到字符串s,该方法返回值为-1。

应用举例——字符串操作的综合应用 本节应用实例将通过两个小实例来巩固字符串的综合应用方法。 compareTo的使用 toUpperCase和toLowerCase的使用

compareTo的使用 下面练习字符串方法compareTo的使用(光盘:\源文件\第4章\应用举例compareTo1.txt)。

toUpperCase和toLowerCase的使用 下面将练习字符串方法toUpperCase、toLowerCase的使用,(光盘:\源文件\第4章\应用举例charactor1.txt)。

上 机 练 习 本节上机练习将通过数组的定义和使用,创建向量类两个练习,巩固本章所学的知识点。 数组的定义和使用 创建向量类

数组的定义和使用 本次练习熟悉数组的定义和使用,将12个二进制数放入数组中,并通过数组对它们进行位运算的操作,并将结果逐行显示出来(光盘:\源文件\第4章\上机练习1.txt)。

类“Test_shuzu”运行结果

创建向量类 本次练习将通过创建一个向量类的实例展示了数组与向量类的使用(光盘:\源文件\第4章\上机练习2.txt)。

习 题 (1)自行设计一个向量的例子,并编程实现它。 (2)编程计算从5到10的平方值,并将结果存入一个数组中。 习 题 (1)自行设计一个向量的例子,并编程实现它。 (2)编程计算从5到10的平方值,并将结果存入一个数组中。 (3)设定一个含有大小写字母的字符串,先将所有的大写字母输出,再将所有小写字母输出。

习 题 (4)设置m=“HelloJava”,请写出下列方法的值。 m.length( ) m.contact(“mickle”) 习 题 (4)设置m=“HelloJava”,请写出下列方法的值。 m.length( ) m.contact(“mickle”) m.substring(2,5); m.replace(‘J’,’a’); (5)设定10个字符串,打印出以字母“b”开头的字符串。