【实验内容】
1、(StringFunc.java)已知一个字符串s为“扁担长,板凳宽,板凳没有扁担长,扁担没有板凳宽。扁担要绑在板凳上,板凳偏不让扁担绑在板凳上。”,使用以下字符串函数完成任务并显示出来:
(1)用substring取出s中第一个“板凳宽”并显示出来。
(2)用indexOf()找出s中“扁担”出现的所有位置。
(3)用字符串运算+形成包含重复10000次字符串s的长字符串,输出计算时间和总长度。
(4)用StringBuilder形成上面的长字符串,输出计算时间和总长度。
提示:long time= System.currentTimeMillis()
//取得当前时间的毫秒数(距离新纪元时间1970年1月1日0时0分0秒的毫秒数)。
代码如下:
public class StringFunc{
final static String s="扁担长,板凳宽,板凳没有扁担长,扁担没有板凳宽。扁担要绑在板凳上,板凳偏不让扁担绑在板凳上。";
public static void main(String args[]){
String s1=s.substring(4,7);
System.out.println(s1);
int startindex=0;
String target="扁担";
while(true){
startindex=s.indexOf(target,startindex);
if(startindex==-1)
break;
System.out.print(startindex+" ");
startindex=startindex+target.length();
}
System.out.println("");
long time= System.currentTimeMillis();
String s2="";
for(int i=0;i<10000;i++)
s2+=s;
int length1=s2.length();
long time1= System.currentTimeMillis();
System.out.print("字符串相加的时间:");
System.out.print(time1-time);
System.out.print("ms "+"字符串长度:");
System.out.println(length1);
long time2= System.currentTimeMillis();
StringBuilder s3=new StringBuilder(s);
for(int i=0;i<9999;i++){
s3.append(s);
}
long time3= System.currentTimeMillis();
String s31=s3.toString();
System.out.print("StringBuilder的时间:");
System.out.print(time3-time2);
System.out.print("ms "+"字符串长度:");
System.out.println(s31.length());
}
}
2、(Fib.java)斐波那契数列(Fibonacci sequence):第0项是0,第1项是1,从第2项开始,每一项都等于前两项之和,结果是0,1,1,2,3,5,8,13,21,34,55,89,144,233,…。其中,0为第0个斐波那契数。
(1)计算斐波那契数列保存在一个ArrayList类型的变量fibs中,要求一直计算到Long类型的最大斐波那契数。显示最后一个数和fibs的长度。
*最大长整数为Long.MAX_VALUE
(2) 用Iterator类依次取出fibs中每个元素,计算它与前面一个元素的比值(从第2个开始),保存在double类型的动态数组ratio中,然后把ratios中的所有元素值用foreach语句依次显示出来。可以看出这个值逐渐接近黄金分割比例0.6180339887 4989484820 458683436565。
import java.util.*;
public class Fib{
public static void main(String args[]){
long fib0 = 0,fib1 = 1,fib2 = 1;
ArrayList<Long> fib = new ArrayList<Long>();
int count=2;
long fib_0=0;
fib.add(fib0); fib.add(fib1);fib.add(fib2);
while(fib.get(count)>0){
count++;
fib_0 = fib.get(count-1)+fib.get(count-2);
fib.add(fib_0);
}
System.out.print(fib.get(count-1));
System.out.print(" count: ");
System.out.println(count);
double sum[]=new double[3];
int num=0;
Iterator<Long> it = fib.iterator();
long fib_1=it.next();
while(it.hasNext()){
if(num==3){
for(int i=0;i<3;i++){
System.out.print(sum[i]);
System.out.print(" ");
}
System.out.print('\n');
num=0;
}
long fib_2=it.next();
double result=(double)fib_1/(double)fib_2;
fib_1=fib_2;
sum[num]=result;
num++;
}
}
}
3、(ShowTags.java)找出html文件(grassland.htm)中的所有标签名(转换为大写字母),并用HashMap保存每个标签出现的次数,最后把所有标签及其出现次数显示出来。
* 要求使用content.charAt(index)依次取出字符(char类型)进行判断。char类型采用“==”进行比较。
* 可能会取到注释和脚本中的标签。
* 不要使用正则表达式
网页链接:(grassland.htm就是该网页源码)
http://travel.sohu.com/20161023/n471039505.shtml?pvid=725adae4dbd11180
import java.io.*;
import java.util.*;
class ShowTags{
public static void main(String[] args)throws IOException{
String content = readFile(".\\grassland.htm");
int len = content.length();
int begin=0,end=0;
int value=0;
String s="";
HashMap<String, Integer> map = new HashMap<String, Integer>();
for(int i=0;i<len;i++){
if((content.charAt(i)=='<')&&(content.charAt(i+1)!='!')){
begin=i;
for(int j=i+1;j<len;j++){
if(content.charAt(j)=='>'){
i=j;
end=j;
s=content.substring(begin,end+1);
s=s.toUpperCase();
break;
}
else if(content.charAt(j)==' '){
i=j;
end=j;
s=content.substring(begin,end)+'>';
s=s.toUpperCase();
break;
}
}
int flag=0;
Iterator<String>it = map.keySet().iterator();
while(it.hasNext()){
String key = (String)it.next();
if(s.equals(key)){
value = map.get(key);
map.put(s,value+1);
flag=1;
break;
}
}
if(flag==0){
map.put(s,1);
}
}
}
int num=0;
Iterator<String>it = map.keySet().iterator();
while(it.hasNext()){
String key = (String)it.next();
int value1 = map.get(key);
num++;
if(num==3){
num=0;
System.out.println(key+":"+value1);
}
else
System.out.print(key+":"+value1+" ");
}
}
static String readFile(String fileName) throws IOException{
StringBuilder sb = new StringBuilder("");
int c1;
FileInputStream f1= new FileInputStream(fileName);
InputStreamReader in = new InputStreamReader(f1, "UTF-8");
while ((c1 = in.read()) != -1) {
sb.append((char) c1);
}
return sb.toString();
}
}