实验6 常用系统类Word文档格式.docx
《实验6 常用系统类Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验6 常用系统类Word文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
![实验6 常用系统类Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/ade1a4ef-4908-414f-b3e6-9f4e36b4a7ef/ade1a4ef-4908-414f-b3e6-9f4e36b4a7ef1.gif)
表5-2数据包装类的常用方法
方法功能
intInteger.parseInt(Strings)将数字串转化为整数
longLong.parseLong(Strings)将数字串转化为长整数
doubleDouble.parseDouble(Strings)将数字串转化为双精度数
booleanCharacter.isDigit(charc)判断某字符是否为数字
booleanCharacter.isLetter(charc)判断某字符是否为字母
StringInteger.toString(intk)将一个整数转换为字符串
StringInteger.toBinaryString(intk)将一个整数转换为二进制字符串
5.2.4String类--字符串常量
(1)String类创建的字符串对象的内容不能改变;
(2)理解字符串的拼接运算的含义,可以将任何数据类型的数据与字符串进行拼接,包括对象类型的数据,它将调用对象的toString()的结果与串拼接。
拼接的结果为一个新的串对象,不会改变源字符串对象的内容。
例如:
Stringx="
hello"
;
Stringx1=x;
//x1和x指向同一串对象
Stringy="
good"
x=x+y+2;
//修改x的值,让其指向新生成的串。
System.out.println(x);
System.out.println(x1);
输出结果为:
hellogood2
hello
(3)String类提供了丰富的实例方法,见表5-3。
表5-3String类的实例方法
booleanequals(Objectobj)当前串与参数串比较是否相等
booleanequalsIgnoreCase(Strings2)比较两个字符串,不计较字母的大小写
intlength()求字符串长度
Stringtrim()去除前导空格和尾部空格
intindexOf(intch,intfromIndex))从formIndex位置开始往后查找字符串中的字符ch的首次出现位置。
intindexOf(Strings,intfromIndex))从formIndex位置开始往后查找字符串中的子串的首次出现位置。
charcharAt(intindex)从串中获取指定位置的字符
Stringsubstring(intbegin,intend)根据始末位置从串中获取子串
String[]split(Stringregex)按照分隔符将串分成若干子串
Stringreplace(charch1,charch2)将字符串中所有ch1字符换为ch2
5.2.5StringBuffer类—可变字符串
(1)StringBuffer类创建的串可以修改,可以对串的内容进行增、删、改操作。
(2)StringBuffer的常用方法,见表5-4。
表5-4StringBuffer类的常用方法
StringBufferappend(Objectobj)某个对象的串描述添加到
StringBuffer尾部
StringBufferinsert(intpos,Objectobj)将某个对象的串描述插入到StringBuffer中的某个位置
StringBuffersetCharAt(intpos,charch)用新字符替换指定位置字符
StringBufferdeleteCharAt(intpos)删除指定位置的字符
StringBufferreplace(intstart,intend,Stringstr)将参数指定范围的一个子串用新串替换
Stringsubstring(intstart,intend)获取所指定范围的子串
5.2.6Vector类
(1)类Vector实现了可扩展的对象数组,使用向量没有数组的范围限制,可以不断添加元素。
但向量中不能存放基本数据类型的数据,加入的数据均为对象。
(2)向量的常用访问方法见表5-5。
表5-5Vector类常用方法
voidadd(intindex,Objectelement)将某个对象插入向量的指定位置
booleanadd(Objecto)将某个对象添加到向量中
voidaddElement(Objectobj)将某个对象添加到向量中
intsize()向量中已存放元素个数
voidclear()删去所有元素
booleancontains(Objectelem)检测向量中是否包含指定对象
Objectget(intindex)根据位置获取向量元素
intindexOf(Objectobj,intstart)
从指定位置起向后搜索对象obj,返回首次匹配位置
booleanremove(Objecto)删去指定对象
voidremoveElementAt(intindex)删去指定位置的元素
(3)对向量的遍历访问方法(设v为一向量)
方法1:
通过位置访问
for(intk=0;
k<
v.size();
k++)
输出v.get(k);
方法2:
通过使用迭代子进行遍历
Iteratorp=v.iterator();
while(p.hasNext())
输出p.next());
5.3样例程序
样例1:
编写一个方法统计一个字符在某字符串中的出现次数;
从命令行参数获取一个算术表达式,利用前面方法判断该表达式的左右括号数量是否一致,如果一致,输出“YES”,否则输出“NO”。
【参考程序】
publicclassCount{
publicstaticvoidmain(Stringargs[]){
Strings=args[0];
if(count(s,’(‘)==count(s,’)’))//看左括号与右括号的出现次数是否一样多
System.out.println("
YES"
);
else
NO"
}
/*统计字符c在串s中的出现次数*/
publicstaticintcount(Strings,charc){
intx=0;
//计数变量
s.length();
k++)
if(s.charAt(k)==c)x++;
//在第k个位置出现,则计数增1
returnx;
}
}
样例2:
四位同学中一位做了好事,校长问这四位是谁做的好事。
A说:
不是我。
B说:
是C。
C说:
是D。
D说:
C胡说。
已知三个人说的是真话,一个人说的是假话。
根据这些信息,找出做了好事的人。
publicclassgood{
publicstaticvoidmain(Stringa[]){
charman;
//做好事的人
Stringx="
ABCD"
//A、B、C、D中的一个
for(intk=0;
=3;
k++){//用循环去测试各种情形
intcount=0;
man=x.charAt(k);
//假设第k个是做好事者
if(man!
='
A'
)count++;
//A说的话
if(man=='
C'
//B说的话
D'
//C说的话
if(!
(man=='
))count++;
//D说的话
if(count==3)//如果有3人说的是真话,则为要找结果,输出
thisman="
+man);
}
【说明】四个人中,每个人均有可能是做好事的人,所以用循环去测试,分别针对每种情形测试说真话的人的个数,如果count值为3,则为要找结果。
【编程技巧】
(1)利用循环去测试每种可能性;
(2)将每人说的话用逻辑表达。
(3)统计说真话的人的计数变量赋初值0要放在循环内。
样例3:
设有中英文单词对照表,输入中文单词,显示相应英文单词,输入英文单词显示相应中文单词。
如果没找到,显示“无此单词”。
publicclassWord{
String[][]x={{"
"
好"
},{"
bad"
坏"
work"
工作"
}};
intk;
Stringin=args[0];
if((k=find_e(x,in))!
=-1)
System.out.println(x[k][1]);
elseif((k=find_c(x,in))!
=-1)
System.out.println(x[k][0]);
无此单词"
);
/*根据英文找中文,找到则返回所在行位置,未找到则返回-1*/
staticintfind_e(String[][]x,Stringy){
for(intk=0;
x.length;
if(x[k][0].equals(y))
returnk;
return-1;
/*根据中文找英文,找到则返回所在行位置,未找到则返回-1*/
staticintfind_c(String[][]x,Stringy){
if(x[k][1].equals(y))
【说明】这里为了简化问题,编写了两个方法,一个查找中文,一个查找英文。
只要分别按中文和英文查找一遍即可,如果均为-1,则输出“未此单词”。
(1)编写方法实现查找可增进程序的表达清晰;
(2)如何将单词中英文对应关系用二维数组表达。
样例4:
从键盘输入一个英文句子,统计该句子中英文单词的个数,将找出所有单词存放到一个数组中。
输入Hesaid,"
That'
snotagood
idea."
则输出为:
共有"
+x.length+"
个单词
Hesaidthatsnotagoodidea
importjava.io.*;
publicclassListWords{
publicstaticvoidmain(String[]args)throwsIOException{
Stringline;
charch;
booleanisWord=false;
StringBufferword=newStringBuffer();
输入一行文本:
"
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
line=br.readLine();
for(inti=0;
i<
line.length();
i++){
ch=line.charAt(i);
if(Character.isLetter(ch)){
word.append(ch);
isWord=true;
else{
if(isWord){
word.append("
isWord=false;
Stringx[]=word.toString().split("
System.out.println("
共有"
个单词"
for(intn=0;
n<
n++)
System.out.print(x[n]+"
"
【说明】一个单词的判断条件是已字母开头,后跟若干字母。
也就是遇到非字母的单词即可断定为单词结束。
为了便于处理,这里将所有单词拼接到一个串中,单词之间用逗号分隔。
程序中引入了一个逻辑变量isWord来标记当前处理字符是否为单词的部分,是则标记为true,不是则标记为false。
本例也演示了split方法的使用,可以很方便地将一个字符串按指定分隔符分离出子串并存放到数组中。
(1)定义一个StringBuffer类对象拼接所有单词,单词之间用逗号分隔。
(2)抓住单词的特点,是连续若干字母,所以遇到字母即可将其作为单词的组成部分插入StringBuffer中。
定义一个逻辑变量记录前面是否出现单词,如果出现,则逻辑变量为true,否则为false。
在处理非字母字符时通过判断该逻辑变量确定是否应插入一个逗号到StringBuffer中。
(4)
利用循环扫描处理整个字符串,在处理完毕后再将StringBuffer中的所有内容转化为String类对象,利用Split方法按逗号分隔分离出单词存入数组中。
样例5:
利用向量记录实现学生管理,能支持学生对象的增加、删除操作,每个学生对象包括学号、姓名、性别。
删除学生必须输入学生的学号。
可以设计一个操作菜单,包括“增加”、“删除”、“显示”、“退出”4个选项。
importjava.util.*;
publicclassstudent{
Stringname;
longstno;
Stringsex;
publicstudent(Stringname,longstno,Stringsex){
this.name=name;
this.stno=stno;
this.sex=sex;
publicStringtoString(){
return"
姓名:
+name+"
学号:
+stno+"
性别="
+sex;
Vectorgroup=newVector();
outer:
while(true){
Stringch=input("
选择:
1--增加,2---删除,3-显示,4--退出"
intchoice=Integer.parseInt(ch);
switch(choice){
case1:
group.add(inputStudent());
break;
case2:
longstno=Long.parseLong(input("
请输入学号:
));
group.size();
k++){
studentx=(student)group.get(k);
if(x.stno==stno)
group.removeElement(x);
break;
case3:
Iteratorp=group.iterator();
==>
+p.next());
case4:
breakouter;
/*从键盘输入一个字符串*/
publicstaticStringinput(Stringhint){
Stringx=null;
System.out.println(hint);
try{
x=br.readLine();
}catch(IOExceptione){}
returnx;
/*从键盘输入一个学生*/
publicstaticstudentinputStudent(){
Stringname=input("
请输入姓名:
Stringsex=input("
请输入性别:
returnnewstudent(name,stno,sex);
【说明】为了简化程序,设计了两个方法:
Stringinput(Stringhint):
根据提示从键盘获取一个字符串;
studentinputStudent():
从键盘获取学生相关信息构造学生对象。
(1)在输入数据的处理中编写方法,简化设计。
(2)利用向量存储学生对象,查找数据时,要从向量中读取数据进行比较,获取对象时要强制转换才能赋给代表学生的引用变量。
(3)程序演示了对向量的两种遍历处理方法。
5.4上机练习
&
sup2;
基本题
1)设有一个由10个英文单词构成的字符串数组,要求:
(1)统计以字母w开头的单词数;
(2)统计单词中含“or”字符串的单词数;
(3)统计长度为3的单词数。
2)输入一个算术表达式,例如:
45*2+23*(234-24),求出其中有多少整常数。
3)创建一个程序,输出今天的年、月、日。
提示:
创建一个java.util.Date类的对象代表当前的系统日期,使用对象的getYear()方法、getMonth()方法、getDay()方法可获得对应的年月日。
4)编写一个程序,用于计算xopy这样的表达式的值,表达式从命令行输入,其中op为+-*/%几种运算符之一,x和y代表两个实数。
5)将以下程序补充完整
importjava.util.Random;
publicclassJava_2{
publicstaticvoidmain(Stringargs[]){
Randomrandom=newRandom();
floatx=random.nextFloat();
//产生0.0与1.0之间的一个符点数
intn=Math.round(20*x);
//构造20以内的一个整数
longf=1;
//保存阶乘的结果
intk=1;
//循环变量
//*********Found********
do{__________;
k++;
}__________
System.out.println(n+"
!
="
+f);
6)将以下程序补充完整
//Java_1.java,字符串类的startsWith()和endsWith()方法
importjavax.swing.*;
publicclassJava_1{
publicstaticvoidmain(Stringargs[]){
Stringstrings[]={"
started"
"
starting"
ended"
ending"
};
Stringoutput="
//测试startsWith()方法
strings.length;
i++)
if(strings[i].startsWith("
st"
))
output+="
\"
+strings[i]+"
开始于\"
st\"
\n"
//从字符串第2个字符开始
art"
2))
outpu