[总结]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 ,可以完成一些数据的转换。
- [总结]java真是博大精深(三)
- [总结]数据结构真是博大精深(三)
- [总结]C++真是博大精深(三)
- [总结]操作系统真是博大精深(三)
- [总结]Java真是博大精深(一)
- [总结]java真是博大精深(二)
- [总结]java真是博大精深(四)
- [总结] 离散数学真是博大精深(一)
- [总结]C语言真是博大精深(一)
- [总结]C语言真是博大精深(二)
- [总结]数据结构真是博大精深(一)
- [总结]数据结构真是博大精深(二)
- [总结]数据结构真是博大精深(四)
- [总结]C++真是博大精深(一)
- [总结]C++真是博大精深(二)
- [总结]C++真是博大精深(四)
- [总结]操作系统真是博大精深(一)
- [总结]操作系统真是博大精深(二)
- 常见的一些bug
- python网络爬虫与信息采取之解析网页实例---oJ期末成绩排名
- extjs一些属性
- lintcode--x的n次幂
- 模拟模拟交易系统(四)——数据库设计
- [总结]java真是博大精深(三)
- AndroidStudio快捷键格式化代码
- 【javascript设计模式】2.Module(模块)模式
- shell脚本之变量
- Java动态代理机制详解
- codeforces 669A Little Artem and Presents
- 在idea中出现 错误Servlet.init() for servlet springmvc threw exception
- hadoop2.x之IO:压缩和解压缩
- pat:L1-039. 古风排版