字符串是有限个字符的有序集合,前面讲的char类型用于表示和存储单个字符,字符串相当于几个或多个char类型的有序集合,用于表示和存储多个有序的字符序列。例如:“I want to learn Java programming”、“我要学Java编程”、“3+5=8”、“abc”等等。
四则运算器程序需要存储用户输入的计算表达式,计算表达式由多个字符组合而成,用前面所掌握的Java数据类型,不适合存储计算表达式。程序需要一个新的类型来存储计算表达式,这个新的类型就是字符串类型。
四种不适合存储计算表达式
Java语言的字符串类型同前面介绍的Java基础类型不太一样,Java没有给字符串类型定义一个关键字,用于声明字符串类型,而是通过类的方式提供对字符串的操作和存储。在Java语言中,字符串类型被定义为类,类名为“String”,该类提供了多个构造方法和字符串操作方法,用于满足对字符串不同的处理要求。
String类的初始化
String类可用字符串常量对其初始化。例如:
也可以调用其构造方法来进行,String类提供了多个构造方法对其初始化,下面列举了几个主要的构造方法:
(1)方法名称:String()
方法说明:构造一个空串(不包含任何字符)
方法示例:String szWelcome = new String();
(2)方法名称:String(String original)
方法说明:用original内容初始化新创建的字符串
方法示例:
String szTemp = “欢迎加入编程小组”;
String szWelcome = new String(szTemp);
(3)方法名称:String(byte[] bytes))
方法说明:用字符数组(后面会讲解数组结构)始化新创建的字符串
方法示例:
char chTemp[] ={‘欢’,’迎’ ,’加’,’入’,’编’,’程’,’小’,’组’};
String szWelcome = new String(chTemp);
示例1:String类的初始化
在D盘Java目录下,新建“StringInitSample.java”文件。用记事本打开“StringInitSample.java”文件,输入以下代码:
代码结构分析
程序功能主要是演示String类声明及初始化的使用。
程序使用了String类提供的三种不同的初始化方法。第一种方法是通过字符常量赋值初始化;第二种方法是通过new运算符(后面会讲解)实例化String类,并以传入的已声明的字符串初始化;第三种方法是通过new运算符实例化String类,并以传入的字符型数组初始化。
编译“StringInitSample.java”文件,在命令行窗口输入“javac StringInitSample.java”并执行命令,编译通过后,在命令行窗口输入“java StringInitSample”运行Java程序,命令行窗口显示如下信息:
String类初始化运行结果
从上述结果可以看出,用相同的内容对String类进行不同的初始化,虽然初始化方法不太,但其内容是相同的。
String类的方法
String类提供了多个方法,用于完成对字符串查找、替换、比较、连接、复制、分割等操作。下面列举了几个主要的操作方法,其它方法请参考Java API:
(1)方法名称:charAt(int index)
方法说明:返回由索引号指定的单个字符,索引是单个字符在字符序列的位置,String类的序列号从0开始。
方法示例:
String szWelcome = “欢迎加入编程小组”;
//返回索引号为1的字符,当前应返回字符‘迎’
char chTemp = szWelcome. charAt(1);
(2)方法名称:length()
方法说明:获取字符串的长度,String包含的字符的个数。
方法示例:
String szWelcome = “欢迎加入编程小组”;
//返回字符串长度,当前返回数值8
int nLength = szWelcome. length()
(3)方法名称:indexOf(int ch)
方法说明:查找字符串是否包含ch字符,返回字符的整型数值。若包含返回索引号,否则返回-1。
方法示例:
String szWelcome = “欢迎加入编程小组”;
//查找字符’编’,当前返回4,索引号从0开始
int nIndex = szWelcome. indexOf((int)‘编’)
//或
char chTemp = ‘编’;
int nIndex = szWelcome. indexOf((int) chTemp)
备注:
该方法还可以支持传入字符串类型以及从指定位置开始查找,详情请参考Java API
(4)方法名称:equals(Object anObject)
方法说明:比较两个字符串内容是否相同,若内容相同返回true,否则返回false。传入的参数Object类抽象了Java的所有类,也包括String类,在这里可以认为是String类。关于类及类的抽象、继承后面会讲述。
方法示例:
String szWelcome1 = “欢迎加入编程小组”;
String szWelcome2 = “欢迎加入Java编程小组”;
//比较szWelcome1和szWelcome2的内容是否相同,当前返回false
boolean bEqual = szWelcome. Equals(szWelcome2);
示例2:String类的查找及比较操作
在D盘Java目录下,新建“StringFindSample.java”文件。用记事本打开“StringFindSample.java”文件,输入以下代码:
代码结构分析
程序功能主要是演示String类的查找、获取长度、比较操作。
程序声明了三个String类变量,其中,szWelcome1和szWelcome2赋予相同的值,用于内容比较操作。
语句“int nIndex = szWelcome1.indexOf('编');”,声明了一个整型变量,用于接收查找方法indexOf返回的索引号,并通过printf方法格式化输出。
语句“int nLength = szWelcome1.length();”,声明了一个整型变量,用于接收length方法返回的字符串长度,并通过printf方法格式化输出。
语句“boolean bEqual = szWelcome1.equals(szWelcome2);”,声明了一个boolean型变量,用于接收equals方法返回的布尔值,并通过printf方法格式化输出。
编译“StringFindSample.java”文件,在命令行窗口输入“javac StringFindSample.java”并执行命令,编译通过后,在命令行窗口输入“java StringFindSample”运行Java程序,命令行窗口显示如下信息:
String类查找等操作运行结果
从上述结果可以看出,String类的length返回字符串包含的字符个数,indexOf返回字符所在字符串的索引位置,索引从0开始,因此查找字符‘编’时,返回索引4。
就n在实际编程中,Java的String类是使用频率非常高的类,需要深入理解和掌握,弄清楚String提供的各种操作方法和技巧。四则运算器解析计算表达式时,可以通过String的length方法获取字符串长度,然后循环遍历表达式的每个字符,并应用equals方法判断是数字还是运算符,并做相应的处理。