[总结]java真是博大精深(三)

来源:互联网 发布:js ajax get请求 编辑:程序博客网 时间:2024/06/05 23:03

数组向量字符串

1、字符串

 在Java中,字符串被当作对象来处理。

 字符串是字符的序列,它是组织字符的基本数据结构,从某种程度上来说有些类似于存放字符的数组。

 字符串常量:创建之后不能再修改。由于程序中经常需要对它做比较、搜索之类的操作,所以通常把它放在一个具有一定名称的对象之中,由程序对该对象完成上述操作,用String类来创建字符串常量。

 字符串变量:创建之后可以做修改。由于程序中经常需要对它做添加、插入、修改等操作,一般存放在StringBuffer类的对象中。

 String类和StringBuffer类都在java.lang包中。

2、类String字符串定义

可以用字符串常量直接初始化一个String对象String s = "Hello World ";

通过构造方法:

    String();无参数的缺省的构造方法用来创建一个空串。String s = new String( );

    String( String value);利用已经存在的字符串常量创建一个新的String对象,该对象的内容与给出的字符串常量一致。String s=new String(“hello”); 或: Strings=“hello”;

    String( char value[ ] );通过给构造方法传递一个字符数组,可以创建一个非空串。String s = newString( chars ) ;

    String ( byte[ ] value);根据指定的字节数组,新建一个字符串。

    String( char value[ ] , int startIndex,  int numChars);创建一个非空串,并且指明所创建的字符串在字符数组中的起始地址以及所包含的字符个数。

    String( byte[ ] value, byte hibyte );因为在Internet上,格式采用八位的ASCII码,所以Java的类String提供了从byte型数组进行初始化的构造方法。其中hibyte指明各字符的高位字节,对于通常所用的ASCII码,必须将高位字节声明为零,而其他的非拉丁文字符则置为非零。

3、String的常用方法

 字符串长度:public int length();返回字符串中的字符数。

 字符串比较

    用 ==运算符检查:检查字符串变量是否指向同一个字符串对象。

    由 equals()方法确定:检查字符串变量指向的字符串是否相等。

    注意:Java在编译时对字符串常量的存储有一个优化处理策略,相同字符串常量只存储一份。

    boolean equalsIgnoreCase (String value);比较两个字符串,忽略大小写。

    int compareTo(String value);按字典次序比较两个字符串的大小,如果源串较小,则返回一个小于0的值,如相等则返回0,否则返回一个大于0的值。

    boolean startsWith(String value);检查一个字符串是否以另一个字符串开始。

    boolean endsWith(String value);检查一个字符串是否以另一个字符串结束。

 字符串连接:运算符“+”可以用来实现字符串的连接。

 搜索字符和字符串

    int indexOf ( int ch);返回字符ch在字符串中出现的第一个位置。

    int lastIndexOf ( int ch);返回字符ch在字符串中出现的最后一个位置。

    int indexOf(String str);返回子串str首字符在字符串中第一次出现的位置。

    int lastindexOf(String str);返回子串str首字符在字符串中最后出现的位置。

    int indexOf (String str,int fromIndex);返回子串str中的第一个字符在字符串中位置fromIndex以后出现的第一个位置。

    int lastIndexOf (String str , int fromIndex);返回子串str中的第一个字符在字符串中位置fromIndex以后出现的最后一个位置。

 字符串提取、连接、替换等方法(String对象一经创建,就不能改变它。可以读取它其中的字符,但不能增删改其中的字符。必要时必须创建新的字符串。)

    public char charAt(int index);从指定位置提取单个字符,该位置由索引指定,索引中的值必须为非负。

    public String substring(int index);提取从位置索引开始的字符串部分。

    public String substring(int beginindex, int endindex);提取 beginindex(包含)和 endindex(不包含)位置之间的字符串部分。

    public String concat(String str);连接两个字符串,并新建一个包含调用字符串的字符串对象。

    public String replace(char old, char new);将调用字符串中出现某个字符的所有位置都替换为另一个字符。

    public String trim();将调用字符串的前后空格删掉。

    public String toLowerCase();把串中的所有字符转换成小写。

    public String toUpperCase();把串中的所有字符转换成大写。

    String[] split(String regex);根据给定正则表达式的匹配拆分此字符串。

    public void getchars (int srcbegin,int end,charbuf[],int dstbegin);从字符串中提取一个以上的字符,srcbegin为要提取的第一个字符在源串中的位置,end为要提取的最后一个字符在源串中的位置,字符数组buf[]存放目的字符串,dstbegin为提取的字符串在目的串中的起始位置。

      public void getbytes (int srcbegin,int end,bytebyt[],int dstbegin );类似于上一个方法,只是串中的字符均用8位表示,参数及用法同上。

  字符串与模式匹配

    boolean regionMatches( int toffset , Stringother , int ooffset , int len )

boolean regionMatches( boolean ignoreCase , inttoffset , String other , int ooffset , int len )

   上述两个方法都是用来进行模式匹配的,匹配成功则返回true,否则返回false。其中,toffset和ooffset分别指明当前字符串和参数字符串中所要比较的子串的起始索引位置,len指明比较的长度,而ignoreCase指明比较时是否区分大小写。对于第一种方法,比较是区分大小写的。

4、字符串与基本类型的相互转化

 从基本数据类型转换成字符串:String类中的valueOf()系列方法。

    public static String valueOf(Boolean b)

public static String valueOf(char c)

public static String valueOf(int i)

public static String valueOf(long l)

public static String valueOf(float f)

public static String valueOf(double d)

 将字符串转化为基本数据类型:Java.lang包的各种基本数据类型类都具有相应的类方法实现转化操作。

    public static byte parseByte(String s)

    public static short parseShort(String s)

    public static long parseLong(String s); 

    public static int parseInt(String s)

    public static float parseFloat(String s)

public static double parseDouble(String s)

 字符数组转化为字符串对象

    String(char[]);String(char[],int offset,int length)

 字符串转化为字符数组

    public char[] toCharArray();初始化一个字符数组,该数组的长度与字符串长度相等,并将字符串对象的全部字符复制到该数组中。

    public void getChars(int start,int end,char c[],intoffset);将当前字符串中从start至end-1位置上的字符复制到数组c中,并从数组c的offset处开始存放。

 字节数组转化为字符串

    String(byte[]);String(byte[],int offset,int length)

 字符串转化为字节数组

    public byte[] getBytes();将当前字符串转化为一个字节数组。

5、StringTokenizer类—字符串词法分析器

  java.util包中StringTokenizer类所定义的对象,可以用来对字符串进行分析。比如一个句子、 一个段落,一篇文章字、词个数统计等。

 StringTokenizer类的两个常用构造方法:

    StringTokenizer(String s);为字符串s构造一个分析器,使用默认的分隔符集合,即空格符、换行符、回车符、Tab符、进纸符。

    StringTokenizer(String s,String delim);为字符串s构造一个分析器,参数delim中的字符作为分隔符。

 成员方法

    nextToken( );逐个获取字符串的每一个语言符号单位。

    hasMoreTokens( );判断字符串中是否还有语言符号。

    countTokens( );统计字符串中共有多少个语言符号。

6、StringBuffer

 StringBuffer用于表示可以修改的字符串。

 使用连接运算符 (+)的字符串会自动创建字符串缓冲对象。

 构造方法

public StringBuffer();分配长16字符的字符缓冲区。

public StringBuffer (int length);分配长度为length的空缓冲区。

public StringBuffer(Stringvalue);接收字符串作为初值,后面再留 16个字符的空缓冲区。

7、StringBuffer类的方法

 int length( );返回StringBuffer对象的长度。

 public void setLength(int newLength);明确地定义字符串的长度。如果newlength大于现在的长度,串尾将补0,如果小于,那么newlength后的字符将丢失。

 int capacity();返回字符串缓冲区的长度,即总的可供分配的字符个数。

 void setCharAt(int pos, char ch);使用 ch指定的新值设置 pos 指定的位置上的字符。

 String toString( );转换为字符串形式。

 StringBuffer insert(int offset,String s);在指定位置插入指定的字符串。

 public StringBuffer append(对象类型 对象名);将指定的参数对象转化成字符串,附加在原来的字符串对象之后。

 StringBuffer reverse();将此字符序列用其反转形式取代。

 StringBuffer delete(int start, int end);删除调用对象中从 start位置开始直到 end 指定的索引 – 1 位置的字符序列。

 StringBuffer deleteCharAt(int pos);删除 pos指定的索引处的字符。

 StringBuffer replace(int start, int end, String s);使用字符串s替换调用字符串中从 start 开始到 end 结束的子字符串。

8、String与StringBuffer的转换

 产生一个內容与String对象str相同的StringBufffer对象::StringBuffer ss = new StringBuffer(str);

 产生一个內容与StringBuffer对象ss相同的String对象:Strings = ss.toSting();

9、Java与C和C++处理字符串的差别

 C和C++的字符串只是简单的以\0结尾的字符数组,而Java中,字符串是一个封装的对象,这种处理对于编程者提供了许多有利之处。

 C和C++中可以通过指针直接对字符串所在的内存地址进行操作,并且不对越界情况进行检查,Java中只能通过类String或StringBuffer所提供的方法对字符串进行操作,并且要对越界情况进行检查并报告,这样大大增加了安全性。

10、数组

 数组是一种最简单的复合数据类型,是一组同类型有序数据的集合。

 数组分为一维数组和多维数组。

 数组的元素既可以是简单类型,也可以是引用类型。

11、Java中创建数组的步骤

 声明数组

 创建数组空间

 数组采用动态内存分配方式,只有在声明数组变量,并且申请了数组占用的内存空间后才能对数组元素进行运算和操作。

12、一维数组

声明一维数组的两种形式:数组元素类型 数组名[ ];或 数组元素类型[ ]  数组名;

创建数组空间:数组名=new 数组元素类型[元素个数];

 与C、C++不同,Java在数组的定义中并不为数组元素分配内存,因此[ ]中不用指出数组中元素的个数,即数组长度。

 只有用new为数组分配空间以后,数组才占用一片连续的存储单元。

 创建数组空间时,必须指出元素的类型和个数。

 一旦为数组分配了存储空间,程序中不能改变数组的长度,但可以再次用new为数组重新分配空间。

  数组创建后,系统自动为数组元素赋初值,所以数组的创建也称动态初始化,数组元素赋初值为0

 声明数组和创建数组空间可组合在一起, 用一条语句完成。如int a[]=newint[3]

 声明数组仅仅指定了数组的名字和数组元素的类型,要想真正使用数组还需要为它开辟内存空间,即创建数组空间。分配内存空间时必须指明数组的长度。

13、创建可变长数组

 根据输入的数据来定义数组长度。

 在程序中随时修改数组长度。重新定义后数组元素初始化为0

14、数组元素的引用

 数组元素的引用格式:<数组名>[<下标表达式>]。

 数组元素下标由0开始,最大的下标比数组长度小1。

 当定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。

15、一维数组静态初始化

 类型 数组名[ ] = { 元素1[,元素2…]  }

 数组名后不能定义大小。

 元素为与声明类型一致的初始值。

16、数组的长度与越界检查

 对于每个数组都有一个属性length指明自身的长度,如f1.length指明数组f1的长度。

 Java对数组元素进行越界检查。

17、for-each格式的循环语句:for(Type value : array) { expression value; }

 举例:for(int i=0; i<a.length; i++ )è for( int  x:a)

  作用:顺次遍历数组中的元素,并将元素的值赋给临时变量。

 缺点:只能顺次遍历所有元素,无法实现较为复杂的循环;只能读取数组元素的值,赋给临时变量,不能给数组元素赋值。

18、对象数组的创建

 创建数组:type arrayName[ ]=newtype[arraySize];

 创建每一个数组元素:arrayName[0]=newtype(paramList);

19、多维数组

 在Java语言中,由于把二维数组看作是数组的数组,数组空间不一定连续分配。

 二维数组每一行的大小可以不同。

 规则数组:各行的列数相同;不规则数组:各行的列数不同。

 声明二维数组:类型 数组名[ ][ ];或 类型[ ][ ]  数组名;或 类型[ ] 数组名[ ];

 与一维数组一样,声明对数组元素也没有分配内存空间,同样要使用运算符new来分配内存,然后才可以访问每个元素。

 为二维数组分配空间有两种方法:使用new运算符(动态初始化)、静态初始化。

 二维数组的创建

    规则数组创建:type arrayName[ ][ ]=new type[length1][length2]

    不规则数组的创建:type arrayName[ ][ ]=newtype[length1][ ];arrayName[i ]=new type[length2];

 二维数组的静态初始化:静态初始化是在声明数组的同时就为数组元素指定初值。例如:int intArray[][] = {{1,2},{3,4},{5,6,7}};

    不必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。

    适用于规则数组和不规则数组。

 对二维数组中每个元素,引用方式为:arrayName[index1][index2];其中index1和index2是数组下标,为整型常数和整型表达式,都是从0开始的。

20、数组操作的常用方法

 类System的静态方法arraycopy(),可用来进行数组复制。其格式和功能如下:public static void arraycopy ( Object src,int src_position, Objectdst, int dst_position, int length)。Object src:源数组名;int src_position:要复制的数组元素的起始下标;Object dst:目的数组名;int dst_position:要复制到的数组元素的起始下标;int length:复制的数组元素的个数。数组下标不能越界。

 java.util.Arrays类中提供了对数组排序sort()、二分查找binarySearch()等静态方法。

21、使用数组来存储不同类型数据:元素类型为Object

22、向量

 向量(Vector)是java.util类包提供的一个工具类。它是允许不同类型元素共存的变长数组。

 每个Vector类的对象可以表达一个完整的数据序列。

 Vector可以追加对象元素数量,可以方便的修改和维护序列中的对象。

23、向量的适用情况

 需要将不同类的对象组合成一个数据序列。

 序列中的元素个数不确定。

 序列中的元素都是对象或可以表示为对象。

 需要做频繁的查询、插入或删除等操作。

 在不同的类之间传递大量的数据。

24、创建向量

 Vector()构造一个长度为10的空向量。

Vector(int capacity)以指定的存储容量构造一个空向量。

 Vector(int capacity, int capacityIncrement)以指定的存储容量和容量增量构造一个空向量。

 向量能重定位和调整自己的容量。缺省时,向量重定位一次,其容量就扩大一倍,呈指数增长,所以应指定容量增量,做为向量构造函数的第二个参数,来创建向量。

  在创建Vector序列时,不需要指明序列中元素的类型,可以在使用时确定。

25、向量中的方法

 向向量序列中添加元素

addElement(Object obj);将新元素添加到序列尾部。

insertElementAt(Object obj, int index);将新元素插入到指定位置。

 查找向量序列中的元素

    Object elementAt(int index);返回指定位置处的元素。由于返回的是Object类型的对象,在使用之前通常需要进行强制类型转换,将返回的对象引用转换成Object类的某个具体子类的对象。

    boolean contains(Object obj);检查向量序列中是否包含指定的对象元素obj

    int indexOf (Object obj,int start_index);从指定的start_index位置开始向后搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回-1。

    int lastIndexOf(Object obj,int start_index);从指定的start_index位置开始向前搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回-1。

 元素的修改:setElementAt(Object obj,intindex);将index位置处的对象元素设置为obj,如果这个位置原来有元素,则被覆盖。

 元素的删除

    removeElement(Object obj);删除与指定的obj对象相同的第一个元素,同时将后面的元素前提,补上空位。返回值是布尔值。

    removeElementAt(int index);删除index指定位置处的元素,将后面的元素前提。

    removeAllElements():清除序列中的所有元素。

 其他方法

    size():返回Vector中元素的数量;

    capacity():返回Vector的容量;

    clone():建立Vector的备份;

    copyInto(Object[]):把Vector中的元素拷贝到一个数组中;

    firstElement():返回第一个元素;

    lastElement():返回最后一个元素;

    isEmpty():判断是否为空;

    setSize(int size):设置Vector的大小;

    trimToSize():将Vector的容量下调至最小值。

26、使用Vector时,一个需要特别注意的问题就是要先创建后使用。如果不先使用new运算符利用构造函数创建Vector类的对象,而直接使用Vector的方法,如:addElement()等方法,则可能造成堆栈溢出或使用null指针等异常,妨碍程序的正常运行。

27、Java语言中专门提供了包装类,将基本类型包装成类。与基本类型对应的包装类有Byte 、Short 、Integer、Long 、Character 、Float 、Double 、Boolean和Void ,可以完成一些数据的转换。

原创粉丝点击