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)运行结果