Java04数组与字符串.ppt

上传人:sh****n 文档编号:7399835 上传时间:2020-03-21 格式:PPT 页数:62 大小:1,014.50KB
返回 下载 相关 举报
Java04数组与字符串.ppt_第1页
第1页 / 共62页
Java04数组与字符串.ppt_第2页
第2页 / 共62页
Java04数组与字符串.ppt_第3页
第3页 / 共62页
点击查看更多>>
资源描述
第四章数组与字符串 信息类专业课程 西北农林科技大学 主要内容 数组数组的应用字符串String可变字符序列StringBuffer可变字符序列StringBuilder 4 1数组 数组是相同类型的数据元素按顺序组成的一种复合数据类型 元素在数组中的相对位置由下标来指明 例如 publicstaticvoidmain Stringargs 其中args是String类型的数组占用连续的内存地址数组的静态性一旦创建就不能修改数组的长度 数组声明 一维数组变量的声明格式有如下两种 1 数组元素的数据类型 变量名 2 数组元素的数据类型变量名 示例 int c String names intc Stringnames 数组的实例化 Java数组实际上也是对象 所以可通过new关键字来创建 示例 int c 声明 不必指定数组的大小c newint 12 创建对象 并分配内存上面的两个语句可以简化成一个语句 int c newint 12 数组的长度用数组名 length 如c length数组元素用数组名 下表 表示 下标的范围是0 数组长度 1 如c 0 初始化数组 基本数据类型的元素初始化为0值或false非基本数据类型的元素初始化为null可以采用循环结构初始化数组示例 double squares squares newdouble 100 for inti 0 i squares length i squares i i i 通过初始化语句创建数组 Java语言允许通过数组的初始化语句创建数组示例 int n 10 20 30 40 50 上面语句创建了一个含有五个元素的数组下标值分别为0 1 2 3 4这时不需要运算符new 数组的内存分配示例 数组的注意事项 当通过循环遍历数组时下标永远不要低于0下标永远要比数组元素个数小当数组下标出错 Java产生ArrayIndexOutOfBoundsException异常数组一旦创建后 不能调整大小可使用相同的引用变量来引用一个全新的数组int a newint 6 a newint 10 多维数组 最常用的多维数组是二维数组int a newint 3 4 二维数组可以理解成如下图示的表格 行的下标值 列的下标值 二维数组的创建 内存分配 1 直接为每一维分配空间 如 inta newint 2 3 该语句创建了一个二维数组a 其较高一维含两个元素 每个元素为由3个整型数构成的整型数组 此时该数组的元素为 a 0 0 a 0 1 a 0 2 a 1 0 a 1 1 a 1 2 二维数组的创建 内存分配 2 从最高维开始 分别为每一维分配空间二维数组的实际上是数组的数组 即创建以数组为元素的数组 意味着 二维数组的每一行可以具有不同的列数 如 intb newint 2 最高维含2个元素 每个元素为一个整型数组b 0 newint 3 b 1 newint 5 此时该数组的元素为 b 0 0 b 0 1 b 0 2 b 1 0 b 1 1 b 1 2 b 1 3 b 1 4 二维数组元素的初始化 1 先创建二维数组 然后通过循环直接对每个元素进行赋值 如 int matrix newint 4 5 for introw 0 row matrix length row for intcol 0 col matrix row length col matrix row col row col 注 二维数组的长度指的是二维数组的行数 用数组名 length表示 某i行的数组长度 该行的列数 用数组名 i length表示 二维数组元素的初始化 2 在声明数组的同时进行初始化 如 inta 2 3 1 5 3 4 声明了一个3 2的数组 并对每个元素赋值 即 a 0 0 2a 0 1 3a 1 0 1a 1 1 5a 2 0 3a 2 1 4 例 构造杨辉三角形 classYanghui publicstaticvoidmain String args intyanghui 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 for inti 0 i yanghui length i for intj 0 j yanghui i length j System out print t yanghui i j System out println 4 2数组的应用 复制数组数组的封装类Arrays数组用作参数和返回值main方法的数组参数获取命令行输入 复制数组 Java在System类中提供了一个特殊的方法arraycopy 用于实现数组之间的复制publicclassArrayCopy publicstaticvoidmain Stringargs inti intarr1 1 2 3 4 5 6 7 8 9 10 intarr2 newint 10 把arr1中所有元素复制到arr2中 下标从0开始System arraycopy arr1 0 arr2 0 arr1 length for i 0 i arr2 length i System out print arr2 i System out println 数组的封装类Arrays java util包封装了一个Arrays类 可实现数组操作的查找 复制和排序binarySearch int a intfromIndex inttoIndex intkey copyOf int original intnewLength copyOfRange int original intfrom intto sort int a 例 数组元素排序 importjava util Arrays publicclassArraySort publicstaticvoidmain String args int hold 10 1 8 3 6 5 4 7 2 9 Arrays sort hold for inti 0 i hold length i System out print hold i 数组用作参数和返回值 数组可以作为参数传递给方法 也可以作为方法的返回值在调用的方法中的数组对象与调用者中的是同一个 如果在方法中修改了任何一个数组元素 因为这个数组与方法之外的数组对象是同一个 所以方法之外的数组也将发生改变 例 数组作为调用方法的传递参数 publicclassCallArray staticvoidupdateArray int arrays arrays 3 10 publicstaticvoidmain String args int hold 0 1 2 3 4 5 6 7 8 9 updateArray hold for inti 0 i hold length i System out print hold i 运行时 hold数组的内容如下 0 1 2 10 4 5 6 7 8 9 例 数组作为方法的返回结果 publicclassReturnArray staticint updateArray int arrays for inti 0 i arrays length i arrays i i returnarrays publicstaticvoidmain String args int hold 9 8 7 3 5 6 4 2 1 0 hold updateArray hold for inti 0 i hold length i System out println hold i hold i main方法的数组参数获取命令行输入 在Java程序的主方法publicstaticvoidmain Stringargs 中 args 是一个字符串数组 用来接收应用程序被调用时由用户直接从键盘输的参数 例 应用程序被调用时参数的传递publicclassMyFriend publicstaticvoidmain Stringarg System out println arg 0 and arg 1 aremygoodfriends 程序经编译后 采用命令javaMyFriendTomAlice来执行程序运行结果为 TomandAlicearemygoodfriends 4 3字符串String 在Java中字符串是对象 用String类来创建在Java中对字符串的处理 需要事先创建一个String的实例 即像其它对象一样 需要对String声明和实例化 如 但我们也可以用简写的形式 像基本数据类型一样创建String 如 String对象 与C语言不同 字符 char 数组不是字符串 String String数值不必以 u0000 结束String对象一旦被创建后就不能被改变 称为非可变对象 String的构造方法 String String byte bytes String byte bytes Charsetcharset String byte bytes intoffset intlength String byte bytes intoffset intlength Charsetcharset String byte bytes intoffset intlength StringcharsetName String byte bytes StringcharsetName String char value String char value intoffset intcount String int codePoints intoffset intcount String Stringoriginal String StringBufferbuffer String StringBuilderbuilder String对象的创建 String对象的内存分配 John Java World 堆内存 字符串池 JVM String对象的内存分配 续 John Java World 堆内存 字符串池 hello JVM s1 s2 String对象的内存分配 续 John Java World 堆内存 字符串池 hello JVM hello String s3 hello String s4 s1 s2 String类的方法及应用 字符串长度比较字符串连接字符串拷贝字符串搜索字符搜索子串修改字符串其他方法 字符串长度 方法length 返回String的长度与数组不同之处 String不含有length成员变量 对str3来说 没有创建对象 内容为null 所以无法确定其长度 比较字符串 字符类型的数据也是数值类型数据比较字符串大小 实际上就是依次比较其所包含的字符的数值大小小写字母与大小字母是不相同的方法有 equals equalsIgnoreCase regionMatches compareTo compareToIgnoreCase equals 方法 booleanequals ObjectanObject 比较当前的字符串与指定的对象比较结果为真 当且仅当给定的参数不为空 并且具有完全相同的字符序列 应用1 String对象的比较 truefalsetruetrue 1 2 方式 1 比方式 2 效率高 比较地址 equals 比较内容 equalsIgnoreCase 方法 booleanequalsIgnoreCase StringanotherString 判别相等 但不区分大小写例如 在不区分大小写情况下 hello 与 HELLO 相等 regionMatches 方法 regionMatches 方法实现子串匹配相等的比较 返回值为boolean类型 若相等则返回true 否则返回false格式如下 booleanstr1 regionMatches booleanignoreCase intoffset Stringstr2 intoffset intlen 参数说明 booleanignoreCase若为true 则忽略大小写intoffset确定str1的起始偏移量Stringstr2str2为参与比较的另一个串intoffset确定str2的起始偏移量intlen确定子串长度 compareTo 与compareToIgnoreCase intcompareTo StringanotherString 比较两个字符串的内容返回 0 如果字符串内容完全相同小于0的值 如果在比较第一个不相同字符 当前字符串的字符的值小于anotherString对应的字符的值大于0的值 如果在比较第一个不相同字符 当前字符串的字符的值大于anotherString对应的字符的值intcompareToIgnoreCase Stringstr 比较两个字符串的内容 但不区分大小写 连接字符串 运算符concat 拷贝字符串 copyValueOf getChars toCharArray substring 搜索字符 charAt intindex indexOf intch indexOf intch intfromIndex lastIndexOf intch lastIndexOf intch intfromIndex 搜索子串 indexOf Stringstr indexOf Stringstr intfromIndex lastIndexOf Stringstr lastIndexOf Stringstr intfromIndex 返回第一次找到的时下标 如果没有找到 则返回 1 修改字符串 replace toLowerCase toUpperCase trim String的其他方法 valueOf 将参数的值转化成相应的字符串replace 替换字符串中的字符或字串toUpperCase toLowerCase toCharArray 将字符串转换成字符数组intern 返回具有相同内容的字符串的引用 4 4可变字符序列StringBuffer StringBuffer类创建的串可以修改 可以对串的内容进行增 删 改操作 StringBuffer 构造一个其中不带字符的字符串缓冲区 初始容量为16个字符 StringBuffer intcapacity 构造一个不带字符 但具有指定初始容量的字符串缓冲区 StringBuffer Stringstr 构造一个字符串缓冲区 并将其内容初始化为指定的字符串内容 StringBuffer方法 publicStringBufferappend Stringstr publicStringBufferinsert intoffset Stringstr publicStringBufferdelete intstart intend publicStringBufferdeleteCharAt intindex publicStringBufferreplace intstart intend Stringstr publicvoidsetCharAt intindex charch publicStringBufferreverse publicintlength publicintcapacity publicvoidsetLength intnewLength StringBuffer对象的内存分配 堆内存 JVM 初始容量为16个字符长度为0 容量为16个字符长度为5 容量为16个字符长度为11 StringBuffer对象的内存分配 续 新数组长度 新容量 原容量 2 2 编译后的字节码等同于以下源码 应用 连接字符串操作 1 运行期连接字符串操作 方式 2 比方式 1 效率高 1 2 编译后的字节码等同于以下源码 应用 连接字符串操作 2 编译期连接字符串操作 方式 1 比方式 2 效率高 1 2 在编译期能确定字符串值时 采用Strings 形式来定义 使用 为字符串连接的性能最佳经常改变字符串的操作或在运行期才能确定字符串时 采用StringBuffer 如何选用String和StringBuffer 尽量不要用new创建String对象避免使用 来重新构造String对象在声明StringBuffer对象时 指定合适的容量 如StringBuffersb newStringBuffer 1024 使用String和StringBuffer注意事项 可变字符序列StringBuilder StringBuilder是JDK1 5版本以后出来的它是作为一个可变的字符序列 此类提供一个与StringBuffer兼容的API 但不保证同步 该类被设计用作StringBuffer的一个简易替换 用在字符串缓冲区被单个线程使用的时候如果可能 建议优先采用该类 因为在大多数实现中 它比StringBuffer要快 思考 编写程序测试以下三种代码方式的效率高低 1 2 3 练习题 关于以下程序段 正确的说法是1 Strings1 Hello 2 Strings2 Hello 3 if s1 s2 4 System out println s1 s2 5 if s1 equals s2 6 System out println s1 equals s2 A 行4与行6都将执行B 行4执行 行6不执行C 行6执行 行4不执行D 行4 行6都不执行 Strings2 newString Hello 答案 A 修改后答案 C 练习题 阅读下面的程序 输出结果是什么 classTestString publicvoidstringReplace Stringtext text text replace j i text text C publicvoidbufferReplace StringBuffertext text setCharAt 0 i text text append C publicvoidchange charch ch 0 Y publicstaticvoidmain Stringargs Stringstr1 java StringBufferstr2 newStringBuffer java charch j a v a TestStringt newTestString t change ch t stringReplace str1 t bufferReplace str2 System out println str1 System out println str2 toString System out println newString ch 输出结果 javaiavaCYava 作业 4 1假设某班级有20个同学选修Java程序设计课程 请创建一个数组初始化所有同学的成绩 统计学生的平均成绩和各等级 优 良 中 及格和不及格 学生人数 作业 4 2 设有3个数组内容如下 Stringx zero one two three four five six seven eight nine Stringy ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen Stringz twenty thirty fourty fifty sixty seventy eighty ninety 用Java命令行输入一个小于100的整数 将其翻成英文表示 例如 输入32 输出 thirtytwo输入14 输出 fourteen输入8 输出 eight反之 输入英文表示 输出相应的整数 作业 4 3 设有一个由20个英文单词构成的字符串数组 要求 1 统计以字母w开头的单词数 2 统计单词中含 or 字符串的单词数 3 统计长度为3的单词数 ThankYou Any
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!