1、单元 10 String 与 StringBuffer单元目标 掌握字符串长度、比较、连接、提取、查询; 掌握分割字符串、大小写转化等操作的方法; 掌握 StringBuffer 对象的常用方法 append()、delete()等; 理解 String 和 StringBuffer 的区别;学习任务1.任务描述设计实现了一个天气预报的数据处理的功能,能提供在线的信息编辑处理,比如插入删除和修改,以及查找、替换等功能。对天气预报数据处理要求为:1) 将每日的天气用字符串数组表示;2) 将每日的天气用转为可编辑字符串数组表示;3) 将每日的天气每个空格处替换为,,在日期前加序号格式为 1、2、等
2、;4) 获得第 5 日夜间的温度。2.运行结果5 日星期一 白天 多云 高温 11 微风夜间 晴 低温 2 微风6 日星期二 白天 晴 高温 15 微风夜间 晴 低温 4 微风1、5 日星期一,白天,多云,高温,11,微风夜间,晴,低温,2,微风 3 级2、6 日星期二,白天,晴,高温,15,微风夜间,晴,低温,4,微风 3 级5 日夜间温度:温度:2知识准备10.1 创建 String 字符串Java 中字符串是一连串的字符。但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java 将字符串作为 String 类型对象来处理。将字符串作为内置的对象处理允许 Java 提供十分丰富的功
3、能特性,以方便处理字符串。字符串是由字符组成的序列,用双引号引起来。JAVA 语言提供了两种字符串类。一类是不可变的字符串 String,另一类是可变的字符串 StringBuffer。创建字符串方式归纳起来有三种:第一种,使用 new 关键字创建字符串。例如:String s1 = new String(山东商业职业技术学院);第二种,直接指定。天气预报信息处理程序设计天气预报信息处理程序设计例如:String s2 = 山东商业职业技术学院;第三种,使用串联生成新的字符串。例如:String s3 = 山东商业职业学院 + 信息技术学院;10.2 String 类的常用操作String 类
4、包括的方法有:求字符串长度;比较字符串;搜索字符串;提取子字符串等。String 表示一个 UTF-16 格式的字符串。10.2.1 计算字符串长度使用 length() 方法获得字符串中字符的个数。例如:String title=”山东商业职业技术学院”;System.out.println(title.length();打印得到字符串的长度为:10。10.2.2 比较两个字符串对象的内容使用方法 equals(Object anObject) 比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true。例如:Stri
5、ng title1=”山东商业职业技术学院”;String title2=”山东商业职业技术学院信息技术学院”;System.out.println(title1.equals(title2)打印输出 false。10.2.3 获得指定位置的字符使用方法 charAt(int index) 返回指定索引处的 char 值。索引范围为从 0到 length() - 1。序列的第一个 char 值在索引 0 处,第二个在索引 1 处,依此类推,这类似于数组索引。例如:String title=”山东商业职业技术学院信息技术学院”;System.out.print(title.charAt(0);/
6、输出字符山System.out.print(title.charAt(title.length()-1);/输出字符院天气预报信息处理程序设计10.2.4 返回字符串第一次出现的位置使用方法 indexOf(String str)返回第一次出现的指定子字符串在此字符串中的索引。例如:String title=”山东商业职业技术学院信息技术学院”;title.indexOf(“商业”);/得到“商业”字符串的位置是 210.2.5 获取子串使用 substring(int beginIndex, int endIndex) 方法返回一个新字符串, 它是此字符串的一个子字符串。例如:String
7、title=”山东商业职业技术学院信息技术学院”;title.substring(11,15);/获得内容为“信息技术”的子字符串10.2.6 拆分字符串使用方法 split(String regex)按照给定的字符串拆分此字符串。例如:String title=”山东商业职业技术学院 信息技术学院”;String data=new String2;title.split(“ ”);System.out.println(data0);System.out.println(data1);打印“山东商业职业技术学院”和“信息技术学院” 。10.2.7 忽略前导空白和尾部空白使用 trim()方法返
8、回字符串的副本,忽略前导空白和尾部空白。例如:String greeting=”你好! ”;String name=”王先生”;String title=greeting.trim()+name;/title 为:你好!王先生10.2.8 替换旧的字符为新字符方法 replace(char oldChar,char newChar)返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有 oldChar 得到的。例如:String title=”山东商业职业技术学院信息技术学院”;title.replace(山,广);10.2.9 StringBuffer 对象的创建String
9、Buffer 类和 String 一样,也用来代表字符串,只是由于 StringBuffer的内部实现方式和 String 不同,所以 StringBuffer 在进行字符串处理时,不生成新的对象,在内存使用上要优于 String 类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用 StringBuffer 要更加适合一些。但是有一个最显著的区别在于,对于但是有一个最显著的区别在于,对于 StringBuffer 对象的每次修改都会对象的每次修改都会改变对象自身,这点是和改变对象自身,这点是和 String 类最大的区别。类最大的区别。StringBuffer
10、类位于 java.lang基础包中,因此要使用它的话不需要特殊的引入语句。10.3 StringBuffer 类的常用方法10.3.1 StringBuffer()StringBuffer 类的构造方法构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。创建了不包含任何文本的对象,默认的容量是 16 个字符。例如:StringBuffer sb = new StringBuffer();10.3.2 StringBuffer(String str)使用该方法构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。例如:StringBuffer sb1 = new StringBu
11、ffer(123);10.3.3 append(String str)使用该方法将指定的字符串追加到此字符序列。例如:String user = test;StringBuffersqlquery=newStringBuffer(select*fromuserInfowhereusername=);sqlquery.append(user );System.out.println(sqlquery.);打印输出:select * from userInfo where username=test10.3.4 insert(int offset, String str)使用该方法将字符串 str
12、 插入字符序列中。天气预报信息处理程序设计例如:String title=”山东信息技术学院”;title.insert(2,”商业职业技术学院”);title 得到的信息为“山东商业职业技术学院信息技术学院”10.3.5 toString()使用该方法返回此序列中数据的字符串表示形式。例如:StringBuffer sb2 = new StringBuffer(s);/String 转换为 StringBufferString s1 = sb1.toString(); /StringBuffer 转换为 String10.3.6 replace(int start, int end, Str
13、ing str)使用该方法将字符串中的从 start 开始到 end-1 结束的字符串替换为子字符串 str。例如:String title=”山东信息技术学院”;title.replace(0,2,”深圳”);System.out.print(title);打印 title 的信息是“深圳信息技术学院”10.3.7 substring(int start, int end)使用该方法返回一个新的 String,它包含此序列当前所包含的字符子序列。例如:StringBuffer sbx4 = new StringBuffer(hello world!);System.out.println(s
14、bx4.substring(6, 11).toString();打印结果为 world10.3.8 delete(int start, int end)使用该方法移除此序列的子字符串。例如:StringBuffer sbx1 = new StringBuffer(TestString);sbx1.delete (0,4);System.out.println(sbx1);打印输出:Test任务实施1实现思路字符串 String 提供了很多方法可以求长度、查找、替换、去掉首尾空格等。StringBuffer 提供了追加和删除、插入操作。 解决问题的步骤:先定义一个变量存放字符串,然后使用字符串的
15、相关方法实现。在定义一个 StringBuffer 类型的变量来编辑处理天气信息字符串。打开 Eclipse,创建一个类 WeatherForcast;声明一个 String 类的对象 WeatherForcast;利用 String 类的求长度、查找子字符串,并将天气预报的内容按天分为两个String 对象;用数组表示两个 String 对象;利用 String 类实现查找替换获取长度等操作;利用 StringBuffer 实现追加和删除等操作;2.程序代码public class WeatherForcast public static String splite(String weath
16、erData, StringdateOfWeather) String eachDayOfReport = new String2;/ 存放每天的天气情况eachDayOfReport = weatherData.split(dateOfWeather);eachDayOfReport1 = dateOfWeather + eachDayOfReport1;return eachDayOfReport;public static void getNightTemperature(String data, String night) int begin = data.indexOf(night)
17、;int end = 0;for (int i = 0; i 3; i+) / 向后移3个,,返回索引begin = data.indexOf(, begin + 1);end = data.indexOf(, begin + 1);System.out.println(温度: + data.substring(begin + 1, end);/ 显示夜间温度/ 获得夜间温度public static void main(String args) String weatherforcast = 5日星期一 白天 多云 高温 11 微风 +夜间 晴 低温 2 微风+6日星期二 白天 晴 高温 1
18、5 微风 + 夜间 晴 低温 4微风;String eachDayOfReport = new String2;/ 存放每天的天气eachDayOfReport = splite(weatherforcast, 6日);天气预报信息处理程序设计for (int count = 0; count eachDayOfReport.length; count+)System.out.println(eachDayOfReportcount);StringBuffer stb = new StringBuffer(eachDayOfReport0),new StringBuffer(eachDayOf
19、Report1) ;/ 创建可编辑字符串数组for (int i = 0; i stb.length; i+) String modifiedText = (stbi.toString().replaceAll( , ,);stbi.replace(0, stbi.capacity(), );stbi.append(modifiedText);/ 追加修改后的文本stbi.append(3级);/ 追加微风3级int b = stbi.toString().indexOf();stbi.delete(b, b + .length();/ 删除第一个stbi.insert(0, Integer.
20、toString(i + 1) + 、);/ 插入序号System.out.println(stbi.toString();System.out.print(5日夜间温度:);getNightTemperature(stb0.toString(), 夜间);/ 获得5日夜间温度任务拓展Java 语言中,提供了专门用来分析字符串的类 StringTokenizer(位于java.util 包中) 。该类可以将字符串分解为独立使用的单词,并称之为语言符号。语言符号之间由定界符(delim)或者是空格、制表符、换行符等典型的空白字符来分隔。其他的字符也同样可以设定为定界符。StringTokeniz
21、er 类的构造方法StringTokenizer(String str, String delim)为字符串 str 构造一个字符串分析器,并使用字符串 delim 作为定界符。 StringTokenizer 类的主要方法及功能 String nextToken() 用于逐个获取字符串中的语言符号(单词) 。 boolean hasMoreTokens() 用于判断所要分析的字符串中,是否还有语言符号,如果有则返回 true,反之返回 false。 int countTokens() 用于得到所要分析的字符串中,一共含有多少个语言符号。【实例 3-8】使用 StringTokenizer 统
22、计单词的个数。【源代码】import java.util.StringTokenizer;天气预报信息处理程序设计public class WordCounting public static void main(String args) int count = 0;String content = This is a test. Please be honesty!;StringTokenizer st = new StringTokenizer(content, .! );while (st.hasMoreTokens() System.out.println(st.nextToken();count+;System.out.println(单词个数: + count);该程序产生的输出如下:ThisisatestPleasebehonesty单词个数:7任务实训1.实训目的 掌握 Java 中字符串的创建和使用; 熟悉字符串的常见操作及方法; 熟悉 StringBuffer 类的方法。2.实训内容使用作业提交系统提交 Java 作业时,需要输入 Java 源代码文件名,并输入自己的邮箱,提交前对 Java 文件名以及邮箱有效性进行检查。编写代码实现对输入的 Java 源文件名以及邮箱有效性的检测。天气预报信息处理程序设计