Java实验六

1、String类的public char charAt(int index)方法可以得到当前字符串index位置上的一个字符。编写程序使用该方法得到一个字符串中的第一个和最后一个字符。同时,将该字符串逆序(不要调用现有的方法)。

(1)思路:

声明字符串并赋值,输出字符串,调用public char charAt(int index)方法输出第一个字符和最后一个字符,使用for语句循环逆序输出字符串。

(2)代码实现:

public class GetCH {
	public static void main(String []args) {
		String s="Hello Everyone!";
		System.out.println("字符串为:"+s);
		System.out.println("第一个字符:"+s.charAt(0));//调用public char charAt(int index)输出第一个字符
		System.out.println("最后一个字符:"+s.charAt(s.length()-1));//调用public char charAt(int index)输出最后一个字符
		System.out.println("逆序输出为:");
		for(int i=s.length()-1;i>=0;i--) {
			System.out.print(s.charAt(i));
		}
	}
}

(3)运行结果:

2、编写程序删除一个字符串中的全部非数字字符,例如,将形如“ab123you”的非数字字符全部剔除,得到字符串“123”。

(1)思路:

代码一:定义并赋值一个字符串s,定义一个字符串c并设长度为零。符合此条件s.charAt(i) >= 48&&s.charAt(i) <= 57的字符放入c,c为删除后的字符串

代码二:定义并赋值一个字符串s,使用正则表达式,和public String[] split(String regex)字符序列分解方法,分解出数字类型字符,然后输出。

(2)代码实现:

//代码一:
public class DeleteCH {
	public static void main(String[]args) {//main方法,java程序的入口地址
		String s="acde12434uiervi1239";//定义并赋值s
		String c=""; //设c长度为0
		for(int i=0;i<s.length();i++) {//访问s字符串把其中数字字符放入c字符串
			if(s.charAt(i)>=48&&s.charAt(i)<=57) {
				c=c+s.charAt(i);
			}
		}
		System.out.print(c);
	}
}
//代码二:
public class Delete {
	public static void main(String[]args) {
		String s="acde12434uiervi1";//定义并赋值s
		String regex="\\D+"; //或[^0123456789]+,正则表达式中代表任何一个非数字字符的元符号
		String a[]=s.split(regex);
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]);
		}
	}
}

(3)运行结果:

3、使用Scanner类和StringTokenizer类的实例分别解析字符串:"数学87分,物理76分,英语96分"中的考试成绩,并计算出总成绩以及平均分数。

(1)思路

代码一使用了public String[] split(String regex)字符序列分解方法,代码二使用了StringTokenizer(String s,String delim)方法,代码三构造了一个Scanner对象,useDelimiter(正则表达式)分解Scanner对象,next()返回被解析的单词如果最后一个单词已被返回Scanner对象调用hasNext()返回false,否则返回true。代码一二未使用try-catch()语句,可加可不加,代码1-3在层层完善,分解后都会输出,将字符单词转换为数值型,计算总成绩,平均成绩,输出。

(2)代码实现 

//代码一:
public class ParsedString {
	public static void main(String[]args) {
		String s="数学87分,物理76分,英语96分";//定义并赋值,
		System.out.println(s);
		String regex="\\D+";//或[^0123456789]+,正则表达式中代表任何一个非数字字符的元符号
		String c[]=s.split(regex);//分解方法,regex为分隔标记,分解单词放入c[]
		int n=c.length;//记录c数组长度
		if(c[0].length()==0) {//当前String对象前缀和regex匹配时方法分解的第一个单词是"",不计入,删除
			for(int i=0;i<c.length-1;i++) {
				c[i]=c[i+1];
			}
			n=n-1;
		}
		for(int i=0;i<n;i++) {//循环输出成绩
			System.out.print(c[i]+" ");//空格排版使用
		}
		int grade[]=new int[n];
		double sum=0;
		for(int i=0;i<n;i++) {//循环转换成绩
			grade[i]=Integer.parseInt(c[i]);
			sum+=grade[i];//记录总成绩
		}
		
		System.out.print("\n总成绩为:"+sum);
		System.out.printf("\n平均成绩为:%.2f",sum/n);
	}
}
//代码二:
import java.util.StringTokenizer;

public class ParsedString2 {
	public static void main(String[]args) {
		String s="数学87分,物理76分,英语96分";//定义并赋值,
		System.out.println(s);
		String regex="\\D+";//或[^0123456789]+,正则表达式中代表任何一个非数字字符的元符号
		s=s.replaceAll(regex, "#");//将s中非数字字符都换成#
		StringTokenizer fenxi=new StringTokenizer(s,"#");//将s中#都分隔
		int n=fenxi.countTokens();//记录首次调用时的单词数,再次调用方法会值改变因nextToken()
		
		double sum=0;//初始化sum
		for(int i=0;i<n;i++) {//循环输出成绩
			int grade=Integer.parseInt(fenxi.nextToken());
			System.out.print(grade+" ");//空格排版使用
			sum+=grade;//计算总成绩
		}
		
		System.out.print("\n总成绩为:"+sum);
		System.out.printf("\n平均成绩为:%.2f",sum/n);
	}
}
//代码三:
import java.util.InputMismatchException;
import java.util.Scanner;

public class ParsedString3 {
	public static void main(String[] args) {
		String s = "数学87分,物理76分,英语96分";//声明并赋值
		System.out.println(s);
		Scanner scanner = new Scanner(s);//构造Scanner对象
		scanner.useDelimiter("[^0123456789]+");//调用useDelimiter()方法将正则表达式作为分隔标记
		int amount = 0;
		double sum = 0;
		while(scanner.hasNext()) {//还有单词未被返回则true,继续循环
			try {
				int grade = scanner.nextInt();//nextInt()方法讲单词返回为int数据
				System.out.print(grade+" ");
				sum += grade;//计算和
				amount++;
			}
			catch(InputMismatchException exp) {//若单词不是数字型单词则发生此异常,
				String t = scanner.next();//next()方法返回非数字化单词
			}
		}
		
		System.out.println("\n总成绩为:"+sum);
		System.out.printf("平均成绩为:%.2f",sum/amount);
	}
}

 (3)运行结果

4、计算某年、某月、某日和某年、某月、某日之间的天数间隔。要求年、月、日使用main方法的参数传递到程序中。

(1)思路

    创建一个新类NewCalendar,构造函数给年月日赋值,编写Millisecond()方法,使用Calendar类返回当前对象的毫秒计时。IntervalTime(NewCalendar a,NewCalendar b) 方法计算相隔天数并输出,Math.abs()返回参数绝对值。主函数,创建NewCalendar对象并调用方法输出显示。

(2)代码实现

import java.util.*;

class NewCalendar{
	int year,month,day;
	long time1;
	NewCalendar(int a,int b,int c){//构造函数
		year=a;
		month=b-1;//在月份中,0表示1月,以此类推
		day=c;
	}
	long Millisecond() {//返回当前对象的毫秒计时
		Calendar calendar=Calendar.getInstance();
		calendar.set(year, month, day);
		time1=calendar.getTimeInMillis();
		return time1;
	}
	void IntervalTime(NewCalendar a,NewCalendar b) {//计算相隔天数并输出
		long time=Math.abs(b.Millisecond()-a.Millisecond())/(1000*60*60*24);
		//Math.abs()返回参数绝对值
		System.out.println(b.year+"-"+(b.month+1)+"-"+b.day+"和"+a.year+"-"+(a.month+1)+"-"+a.day+"相隔时间:"+time);
	}
}

public class CalendarTest {
	public static void main(String[]args) {
	NewCalendar calendar1=new NewCalendar(2019,6,2);
	NewCalendar calendar2=new NewCalendar(2019,5,2);
	calendar2.IntervalTime(calendar1,calendar2);
	NewCalendar calendar3=new NewCalendar(2019,4,2);
	calendar2.IntervalTime(calendar3,calendar2);
	}
}

(3)运行结果

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值