第4章数组和字符串_第1页
第4章数组和字符串_第2页
第4章数组和字符串_第3页
第4章数组和字符串_第4页
第4章数组和字符串_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章数组和字符串Java语言程序设计4.1数组

数组是一种最简单的复合数据类型。

数组是具有一定顺序关系的若干相同类型成员的集合体,组成数组的成员称为该数组的元素。数组元素可以用一个统一的数组名和下标(序号)来唯一确定。数组属于构造类型。数组中的每个元素可以是Java中的基本数据类型,也可以是Java中的引用类型(包括类对象、数组等)。在使用数组时,会涉及到以下几个术语:

数组名应该符合Java语言标识符的命名规则。因为数组是用来存储相同类型的数据,因此数组的类型就是其所存储的元素的数据类型。数组的长度指的是数组中可以容纳的元素的个数,而不是数组所占用的字节数。数组的类型:数组的长度:数组名:4.1数组

一维数组的使用分两大步:一维数组的定义和使用数组。其中一维数组的定义又包括数组声明和为数组分配空间、初始化(创建数组)等内容,必要时,还要为数组元素分配空间或初始化。4.1.1一维数组

例如:inti[];(或int[]A;)doubledArray[];(或double[]dArray;)StringsArray[];(或String[]sArray;)Buttonbtn[];(或Button[]btn;)int[]a,b,c;(或inta[],b[],c[];)★声明一维数组有两种格式:

格式一:数组元素类型数组名[];

格式二:数组元素类型[]数组名;数组名是一个合法的标识符,[]指明该变量是一个数组变量注意:①Java在数组声明时并不为数组分配空间,因此,在声明的[]中不能指出数组中元素的个数(数组长度)。②数组声明之后,尚不能立即被访问,必须通过初始化、分配存储空间创建数组后,才能访问数组元素。当仅有数组声明而尚未分配空间时,数组变量中只是一个值为null的空引用(指针)。4.1.1一维数组

①声明一维数组可以是Java中任意的基本数据类型或引用类型为数组分配空间有两种方法:数组初始化和使用new运算符。为数组分配空间后,数组变量中存储的是数组存储空间的引用地址。4.1.1一维数组

②创建一维数组(1).一维数组数组初始化(静态初始化)

类型数组名[]={初值1[,初值2…]}在数组声明的基础上,在大括号中给出数组元素的初值,系统将自动按照所给初值的个数计算出数组的长度并分配相应的存储空间。基本类型和字符串类型等可以用这种方式创建数组空间。例如:

intintArray[]={1,2,3,4,5};doubledecArray[]={1.1,2.2,3.3};StringstrArray[]={"Java","BASIC","FORTRAN"};4.1.1一维数组

②创建一维数组(2).使用new运算符(动态初始化)若数组已经声明,为已声明数组分配空间的一般形式如下:

数组名=new类型[数组大小];若数组未声明,则可在数组声明的同时用new运算符为数组分配空间:类型数组名[]=new类型[数组大小];数组大小是数组的长度,可以为整型常量或变量例:inta[];a=newint[10];doubleb[]=newdouble[5];Strings[]=newString[2];4.1.1一维数组

②创建一维数组注意:使用new运算符创建数组时,系统会给数组元素提供默认初始值:数值型数组元素的默认初值是0;char类型数组元素的默认初值是全0代码字符;布尔类型数组元素的默认初值是false。所有数组都有一个成员length,程序可以访问它,获得数组的元素个数,但不能改变它。4.1.1一维数组

②创建一维数组一维数组元素的引用方式为:

数组名[下标]其中:下标是一般为int类型的,取值从0开始,直到数组的长度减1。一维数组元素的引用与同类型的变量相同。Java对数组元素要进行越界检查以保证安全性。若数组元素下标小于0、大于或等于数组长度将产生下面的异常:ArrayIndexOutOfBoundsExceptionJava语言对于每个数组都有一个指明数组长度的属性length,它与数组的类型无关。例如intArray.length等。4.1.1一维数组

③引用一维数组元素【例4.1】小应用程序先声明一个数组a,在方法init()中创建它,指定有5个元素,然后为数组元素逐一赋值。在方法paint()中输出各元素的值。通常对数组的处理与循环语句结合在一起,实现对数组元素依次作某种处理。intmyArray[]=newint[5];//数组的全部元素初始化为0for(intindex=0;index<myArray.length;index++){ myArray[index]=index+1; System.out.println(myArray[index]);}4.1.1一维数组

③引用一维数组元素【例4.2】数组也是一种引用类型,一个数组名在不同时间可引用不同的数组。4.1.1一维数组

③引用一维数组元素在Java语言中,多维数组被看作数组的数组。4.1.2多维数组

声明二维数组的一般形式为:

类型数组名[][];

或类型[][]数组名;

类型[]数组名[];数组声明中的类型,可以是简单类型,也可以是复合类型。与一维数组时的情况一样,对数组的声明不分配数组的存储空间。charc[][]floatf[][]Strings[][]4.1.2多维数组

①声明二维数组(1)二维数组的初始化二维数组的初始化也是在声明数组的同时就为数组元素指定初值。

类型数组名[][]={{初值表1},{初值表2},…,{初值表n}};例如:inta[][]={{1,2},{3,4},{5,6,7}};Java系统将根据初始化时给出的初始值的个数自动计算出数组每一维的大小。4.1.2多维数组

②创建二维数组【补充例】定义一个三角形的二维数组classArrayLengths{publicstaticvoidmain(Stringargs[]){intiarray[][]={{44},{-22,16},{11,-12,-99}};System.out.println("iarray.length="+iarray.length);System.out.println("iarray[0].length="+iarray[0].length);System.out.println("iarray[1].length="+iarray[1].length);System.out.println("iarray[2].length="+iarray[2].length);}}数组名.length表示二维数组的行数数组名[行号].length表示该行的元素个数4.1.2多维数组

②创建二维数组(2)使用new运算符ⅰ.若数组已声明,为已声明数组分配空间:数组名=new类型[数组长度1][数组长度2]ⅱ.若数组未声明,可在声明数组的同时用new运算符为数组分配空间:

类型数组名[][]=new类型[数组长度1][数组长度2]例:inta[][];a=newint[3][4];doubled[][]=newdouble[2][5];Strings[][]=newString[2][2];4.1.2多维数组

②创建二维数组(2)使用new运算符ⅲ.可以从最高维开始,分别为每一维分配空间例:例:inta[][]=newint[2][];a[0]=newint[3];a[1]=newint[5];inta[][]=newint[][2];intb[][]=newint[][];注意:在使用运算符new来分配内存时,对于多维数组至少要给出最高维的大小.4.1.2多维数组

②创建二维数组对于二维数组,要注意以下两点:(1)二维数组名.length和二维数组名[下标1].length的区别。二维数组名.length是二维数组的子数组个数;二维数组名[下标1].length是指定子数组的元素个数。(2)二维数组名[下标]是一维数组。【例4.3】一个含有三角二维数组的应用程序4.1.2多维数组

③使用二维数组要注意的问题字符串是字符的序列,可以包含字母、数字和其他符号,它是组织字符的基本的数据结构。字符串常量是用双引号括起的一个字符串,是匿名的String类的对象。Java将字符串当作对象来处理,它提供了一系列的方法对整个字符串进行操作,使得字符串的处理更加容易和规范。Java语言中的包java.lang中封装了final类String和StringBuffer,其中类String对象是字符串常量,建立后不能改变。而类StringBuffer对象类似于一个字符缓冲区,建立后可以修改。"我们赢了^_^""2008奥运加油!\n"4.2字符串

一.定义格式以前使用的每个字符串常量(用双引号括起来的一串字符)实际上都是String对象,因此,可以用字符串常量直接初始化一个String对象。例如:

Strings="HelloWorld.";注意:String类是字符串常量类,String对象建立后不能修改。由于每个字符串常量对应一个String类的对象,所以对一个字符串常量可以直接调用类String中提供的方法。4.2.2字符串的声明和创建

Strings="HelloWorld.";Inta=s.length(

);inta="abcd!".length(

);二.类String构造方法例如:

Strings=newString();

其他创建String对象的构造方法有:String(Stringvalue)用已知串value创建一个字符串对象。String(charchars[])用字符数组chars创建一个字符串对象。String(charchars[],intstartIndex,intnumChars)用字符数组chars的startIndex位置开始的numChats个字符,创建一个字符串对象。String(byte[]bytes)构造一个新的String,方法是使用平台的默认字符集解码字节的指定数组。String(byte[]bytes,intoffset,intlength)该方法使用默认字符编码,用指定字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。此构造方法不需要任何参数,它生成一个空字符串。也可以由字符数组或字节数组来生成一个字符串对象。【补充例】类String构造方法的使用。publicclassStringConstructors{publicstaticvoidmain(Stringargs[]){Strings,s1,s2,s3,s4,s5,s6;bytebyteArray[]={(byte)'J',(byte)'a',(byte)'v',(byte)'a'};charcharArray[]={'程','序','设','计'};Stringsb=newString("欢迎");;s=newString("Hello!");s1=newString();s2=newString(s);s3=newString(sb);s4=newString(charArray,2,2);s5=newString(byteArray,0);s6=newString(charArray);System.out.println("s="+s);System.out.println("s1="+s1);System.out.println("s2="+s2);System.out.println("s3="+s3);System.out.println("s4="+s4);System.out.println("s5="+s5);System.out.println("s6="+s6);}}结果为:s=Hello!s1=s2=Hello!s3=欢迎s4=设计s5=Javas6=程序设计1、连接运算符:+2、方法:concat(Strings)4.2.3字符串基本操作

①字符串连接publicclassExample4_4{staticpublicvoidmain(Stringagrs[]){Strings1="ABC";Strings2="DEFG";System.out.println(s1+s2);s1="ABC";s2="XYZ";s1=s1.concat(s2);System.out.println(s1);}}length()方法可以获取一个字符串的长度。

Strings=“我是学生”;

intstrlen=s.length();

strlen的值是4。字符串常量也可以使用length()获得长度。“我是好学生”.length()的值是5。4.2.3字符串基本操作

②获取字符串长度booleanstartsWith(Strings)方法:

判断一个字符串的前缀是否是字符串s。如:

Stringstr1=“220302620629021”;

Stringstr2=“21079670924022” str1.startsWith(“220”)的值是true;

str2.startsWith(“220”)的值是false。booleanendsWith(Strings)方法:判断一个字符串的后缀是否是字符串s。如:

Stringstr1=“220302620629021”;

Stringstr2=“21079670924022”;

str1.endsWith(“021”)的值是true;

str2.endsWith(“021”)的值是false。

4.2.3字符串基本操作

③字符串前缀和后缀(1)booleanequals(ObjectanObject)和booleanequalsIgnoreCase(StringanotherString)例System.out.println("abc".equals("abc"));System.out.println("abc".equalsIgnoreCase("ABC"));注意:它们与运算符“==”实现的比较是不同的运算符“==”比较两个字符串对象是否引用同一个实例对象,而equals()和equalsIgnoreCase()则比较两个字符串中对应的每个字符是否相同。比较两个字符串的值是否相等,后者忽略字母的大小写。4.2.3字符串基本操作

④比较两个字符串是否相同Strings=newString("abc");Strings1=newString("abc");//s,s1是两个不同的对象System.out.println(s==s1);System.out.println(s.equals(s1));System.out.println("abc"=="abc");falsetruetrue(2)intcompareTo(StringanotherString)通过返回的整数值指明当前字符串与参数字符串的大小关系。若比较的两个字符串有不同的字符,则从左边数起的第一个不同字符的大小即两个字符串的大小。publicclassStringConstructors{publicstaticvoidmain(Stringargs[]){System.out.println("this".compareTo("that"));System.out.println("abcd".compareTo("abcfg"));System.out.println("abcd".compareTo("abcd"));System.out.println("abc".compareTo("abcgdr"));

System.out.println("abc".compareTo("ab"));System.out.println("this".compareToIgnoreCase("THIS"));

}}若比较的两个字符串各个位置的字符都相同,仅长度不同,则方法的返回值为:

this.length()-anotherString.length()忽略字母大小写8-20-3104.2.3字符串基本操作

④比较两个字符串是否相同intindexOf(intch)有重载:intindexOf(Stringstr)intindexOf(Stringstr,intfromIndex)

实现字符串检索。前一个方法是从指定字符串的头开始检索参数字符串s,返回字符串s首次出现的位置。后一个方法则在指定字符串中从某个位置开始检索参数字符串s,返回字符串s首次出现的位置。如果没有检索到,则返回-1。4.2.3字符串基本操作

⑤字符串检索Strings=“ABCDEFGHIJABC”;s.indexOf(“C”);//值是2s.indexOf(“EFG”,2);//值是4s.indexOf(“A”,7);//值是10s.indexOf(“D”,4);//值是-1

Stringsubstring(intbeginindex)和

Stringsubstring(intbeginindex,intendindex)

方法的功能是返回子字符串。前者返回从位置beginindex开始处到串尾的子字符串;后者是返回从beginindex开始到endindex-1为止的子字符串。【例】"abcd".substring(2)"abcd".substring(1,2)"abcd".substring(2,4)结果为:"cd""b""cd"4.2.3字符串基本操作

⑥取字符串的子串

Stringreplace(charoldChar,charnewChar)

用参数newChar指定的字符替换s中由oldChar指定的所有字符,产生一个新的字符串。【例】 Strings1=“1234567788”;

Strings2=s1.replace(‘7’,‘A’);结果:创建两个String对象:

s1为“1234567788”,s2为”123456AA88”4.2.3字符串基本操作

⑦字符串替换

Stringtrim()

该方法的功能是截去字符串两端的空白字符。【例】4.2.3字符串基本操作

⑧字符串去空格publicclassExample4_5{staticpublicvoidmain(Stringargs[]){Strings="1234567788",str;str=s.replace('7','A');System.out.println("s="+s+"str="+str);Strings2="1234567788",str2;str2=s2.trim();System.out.println("s2="+s2+"|str2="+str2+"|");}}方法trim()不能改变字符串自己,而是产生一个新的字符串(1)staticStringvalueOf(Objectobj)该方法的功能是将其他类的参数转换为字符串对象返回。为了方便起见,类String中提供了重载的静态方法valueOf(),用来把其他类型的对象转换为字符串对象。注:其他类也提供了方法valueOf()把一个字符串转换为相应的类对象。4.2.3字符串基本操作

⑨类String与其他类的转换System.out.println(String.valueOf(Math.PI));StringpiStr="3.14159";Floatpi=Float.valueOf(piStr);String对象转换为Float对象用法总结:类型.valueOf(某类的对象)作用:把某类的对象所代表的内容转换为相应的类型(2)toString()java.lang.Object中提供了方法toString()把对象转换为字符串,这一方法通常被重写以适合子类的需要。例如:在实际应用中,也经常需要将字符串转换为其他类型的数据。例如:4.2.3字符串基本操作

⑨类String与其他类的转换Strings=Integer.toString(123);System.out.println(s);//输出为123Strings="125";Integerobj=

Integer.valueOf(s);inti=Value();//上两行也可合写为://inti=Integer.valueOf(s).intValue();教材p79【例4.8】程序获取Date对象的小时、分和秒,获得Date对象的字符串表示,并测试一个循环所消耗的时间。4.2.3字符串基本操作

⑨类String与其他类的转换importjava.util.*;publicclassExample4_8{publicstaticvoidmain(Stringargs[]){Datedate1=newDate();System.out.println("日期及时间是:"+date1);Stringt=date1.toString();t=t.substring(11,t.indexOf('C'));//截取时、分、秒部分。System.out.println("现在时间是:"+t);doublesum=0.0;for(doublei=0;i<80000000;i++){sum=sum+i;}System.out.println(""+sum);Datedate2=newDate();//循环结束后的时间。t=date2.toString();t=t.substring(11,t.indexOf('C'));//字符C之前为时分秒System.out.println("现在时间是:"+t);}}

字符串转化为整型

用Integer.parseInt(Strings)方法 intx;Strings=“6542”; x=Integer.parseInt(s);

字符串转化为long型数据

用Long.parseLong(Strings)方法 longx;Strings=“46046542”; x=Long.parseLong(s);4.2.3字符串基本操作

⑩字符串转换为基本类型

字符串转化为float型

用Float.parseFloat(Strings)方法floatf=Float.parseFloat("12.35"),使f的值为12.35。

字符串转化为double型

用Double.parseDouble(Strings)方法doubled=Double.parseDouble("12.35"),使d的值为12.354.2.3字符串基本操作

⑩字符串转换为基本类型是java.util包中的类,用于语言符号(单词)分析。如:字符串“WearelearningJavaprogramming”,如果把空格作分隔符,那么该串有5个单词。

4.2.4StringTokenizer类

一、构造方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论