第五章 数组与字符串 联系客服

发布时间 : 星期日 文章第五章 数组与字符串更新完毕开始阅读

Java程序设计入门与精通

可以直接使用数组类Arrays提供的binarySearch方法实现查找要求。该方法的使用形式如下:

public static int binarySearch (Xxx a[], Xxx v)

该方法用折半查找算法在指定的数组a查找值为v的元素。其中数组a是类型为char、byte、short、int、long、float、double或者boolean的一个数组,v是与数组a的元素类型相同的值。如果在数组a查找到值为v的元素,则返回该元素的下标;否则,则返回一个负值r,位臵-(r+1)为保持数组有序时值为v的元素应该插入的位臵。

代码:

//调用binarySearch方法在数组中查找指定的值 // ArraySearch.java源程序 import java.util.*; class ArraySearch{ public static void main(String args[]){ char ch []={'a','b','c','e','f','h','i'}; char key='f';

int pos;

System.out.println(\数组为:\ for(int i=0;i< ch.length;i++)

System.out.print(ch[i]+\ \ System.out.println(\ pos=Arrays.binarySearch(ch,key);

if(pos<0)

System.out.println(\元素\在数组中不存在\ else

System.out.println(\元素\在数组中的位臵为\ }

}

运行结果如图5-13:

图5-13例5-8程序运行结果图

79

第五章 数组和字符串

注意: 调用binarySearch时数组必须已经是升序有序的,否则,可

能导致错误的结果。

5.2 字符串

字符串是组织字符的基本数据结构,从某种程度上来说有些类似于字符的数组。在Java程序中需要用到的字符串可以分为两大类,一类是创建之后不会再做修改和变动的字符串常量String类;另一类是创建之后允许再做更改和变化的字符串变量StringBuffer类。

5.2.1 字符串常量与String类

在Java中,没有内臵的字符串类型,字符串常量是作为String类的对象存在的。使用字符串的过程可以表述为声明、创建(初始化)、处理3个步骤。其中声明与创建也经常合并在

一起进行。

1.创建String类对象

创建String类字符串的方式有两种:使用类似基本类型的双引号””赋值法,或使用类的构造方法。

⑴ 使用类的构造方法创建字符串

例如:

String str1=new String(\ //使用类的构造方法创建字符串str1 String str2=new String(\

使用类的构造方法产生的字符串对象,有自己的独立空间。上例中字符串str1和字符串str2就各有自己的存储空间。

图5-14 由类的构造方法产生的字符串对象

80

Java程序设计入门与精通

Java中new String()方法的形式有好几种,常用的形式如下: String() //创建一个空字符串常量。

String(String value) //根据一个已经存在的字符串常量来创建一个新的字符串常量。 String(char[] value) //根据一个已经存在的字符数组来创建一个新的字符串常量。 String(byte[] bytes) //根据一个已经存在的字节数组来创建一个新的字符串常量。 String(byte[] bytes,int startIdnex,int numChars) //根据一个字节数组的指定部分来创建一个新的字符串常量。

String(StringBuffer buffer) //根据一个已经存在的StringBuffer对象来创建一个新的字符串常量。

说明:

因为很多系统中字符串的典型格式是由8位的ASCII字符集构成的8位字节数组,而Java的Char类使用16位表示的Unicode编码字符集。为了使8位字节数组格式的源数据,能够直接为Unicode编码的String类字符串所用,Java提供了由字节数组创建字符串的方法。

其中,参数bytes代表一个由ASCII码构成的字节数组,参数startIdnex代表起始位臵,参数numChars代表元素个数。

【例5-9】利用new方法创建String类字符串示例。 设计思路:

利用new声明并初始化赋值7个String类字符串s1、s2、s3、s4、s5、s6、s7。7次赋值使用了7种不同的构造方法。

代码:

// StringCreate.java源程序 public class StringCreate{ public static void main(String args[]){

char chars1[]={'a', 'b', 'c', 'd', 'e', 'f'};

String s1=new String(); // 创建空字符串s1

String s2=new String(chars1); //由字符数组chars1,创建字符串s2 //由数组chars1的指定部分,创建字符串s3 String s3=new String(chars1,3,3);

byte asc[]={65,66,67,68,69};

//由字节数组asc,创建字符串s4,值是\String s4=new String(asc);

//由字节数组asc的指定部分,创建字符串s5,值是\String s5=new String(asc,2,3);

//数组hz构成\面向对象\个汉字。-61与-26组合成汉字\面\,其余类推 byte hz[ ]={-61, -26, -49, -14, -74, -44, -49, -13}; //用字节数组hz按缺省的字符编码方案创建串对象s6

String s6=new String(hz);

81

第五章 数组和字符串

//从hz下标为2的字节开始,取连续的4个字节{-49, -14, -74, -44}创建s7 String s7=new String(hz,2,4);

}

System.out.println(\System.out.println(\System.out.println(\System.out.println(\System.out.println(\System.out.println(\System.out.println(\

}

程序运行结果图5-15:

图5-15例5-9程序运行结果图

⑵ 使用双引号赋值法创建字符串 例如:

String str3=\ //使用双引号赋值法创建字符串str3 String str4=\

使用双引号赋值法产生字符串是为了提高程序运行速度。系统内存中专门有一块字符串池(String Pool),每产生一个双引号赋值法字符串,系统首先到String Pool中查看是否已有相同的字符串在里面,如果有,就直接拿出来使用。如果没有,才将新字符串放入String Pool中。所以,用双引号赋值法产生的相同字符在内存中只有一份。这样,字符串str3和str4实际上是指向同一内存地址。如图5-16所示。

在创建字符串时,还可以使用Java的”+”运算符,实现字符串间的连接。例如:

String str5= “hello”+”java !”; //声明并创建字符串Str5

如果字符串与其他类型的变量进行”+”运算,系统自动将其类型转换为字符串。例如: int i=5;

String str6=”i=”+i; // 声明并创建字符串str6,值为”i=5”

82