字符串习题练习

  1. 请根据控制台输入的特定日期格式拆分日期

    如:请输入一个日期(格式如:日****年)
    经过处理得到:****年

    提示:使用String的方法indexOf、lastIndexOf、substring

public static void main(String[] args) {
	System.out.println(("请输入一个日期,格式:**月**日****年"));
	Scanner S = new Scanner(System.in);
	String str = S.nextLine();
	int i = str.indexOf("日");//获得日的下标
	System.out.println(str.substring(i+1)+str.substring(0,i+1));//subString截取字符段
}

  1. 给出一个随机字符串,判断有多少字母?多少数字?
public static void main(String[] args) {
   System.out.println(("请随意输入包含字母和数字的字符串"));
   Scanner sc = new Scanner(System.in);
   String str = sc.nextLine();
   char[] ch= str.toCharArray();//转化为字符组

   int j=0;
   int k =0;//jk记录数字和字符的数量
   for (int i =0 ; i<ch.length;i++)
   {
       if (ch[i] >= '0' && ch[i] <= '9'){
           j++;
       }
        if ((ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z')){
           k++;
       }
   }
   System.out.println("数字的数量是:"+j+"\n字母的数量是:"+k);
}
/*输出结果
请随意输入包含字母和数字的字符串
sfsafg234
数字的数量是:3
字母的数量是:6
*/
  1. 以下是一段歌词,请从这段歌词中统计出朋友出现的次数。

“这些年一个人,风也过,雨也走,有过泪,有过错, 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。
朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。”;

提示:使用String方法indexOf、substring。

  • 方法一
public static void main(String[] args) {
	String str = "这些年一个人,风也过,雨也走,有过泪,有过错\n "+
	"还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中\n"+
	"朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。\n"+
	"朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。";
	
	
	int num = 0;//统计数量
	String str2 = str;//初始值
	int t=str2.indexOf("朋友");//初始值
	for (int i = 0; i<str.length();i++){
		if (t>0){
		    t=str2.indexOf("朋友");
		    str2 = str2.substring(t+1);//
		    num++;
		}
	}
	System.out.println(num-1);//注意减一
}
//输出3
  • 方法二
 public static void main(String[] args) {
        String str = "这些年一个人,风也过,雨也走,有过泪,有过错\n "+
                "还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中\n"+
                "朋友一生一起走,那些日子不再有,一句话,一辈子,一生情,一杯酒。\n"+
                "朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。";
        String str2[]= str.split("朋友");
        System.out.println(str2.length-1);
        //输出3
    }
  1. 编写敏感词过滤程序
    说明:在网络程序中,如聊天室、聊天软件等,经常需要对一些用户所提交的聊天内容中的敏感性词语进行过滤。如“性”、“色情”、“爆炸”、“恐怖”、“枪”、“军火”等,这些都不可以在网上进行传播,需要过滤掉或者用其他词语替换掉。

    提示:将用户的聊天内容保存到一个字符串对象或一个StringBuilder对象中,然后与敏感词语类表(数组实现)进行比对。如果属于敏感词语,就过滤掉或替换掉。

public static void main(String[] args) {
    String str[] = {"性","色情","爆炸","恐怖","枪","军火"};
        Scanner sc = new Scanner(System.in);
        String chat = sc.nextLine();

            for (int j = 0;j<str.length;j++){
                while (true){
                    if (chat.indexOf(str[j])>=0){
                        chat = chat.replace(str[j],"*");
                    }
                    else
                        break;
                }
            }
    System.out.println(chat);
    //我爱看色情和充满性的小电影
    //我爱看*和充满*的小电影
}

  1. 根据输入的年份、产品类型和随机数产生固定资产编号
    即:固定资产编号=年份+0+产品类型+3位随机数

    程序运行流程:请输入年份:
    ……
    请选择产品类型(1. 台式机 2. 笔记本 3. 其他):
    ……
    生成3位随机数
    最后显示固定资产编号

    提示:3位随机数按如下方法产生:
    (int)(Math.random()*1000);

public static void main(String[] args) {
        System.out.println("请输入年份");
        Scanner sc = new Scanner(System.in);
        String year = sc.nextLine();//年份

        System.out.println("请选择产品类型(1. 台式机 2. 笔记本 3. 其他)");
        String type[] = {"台式机","笔记本","其它"};
        //类型
        int num= (int)(Math.random()*1000);//随机数
        Scanner sc2 = new Scanner(System.in);
        int i = sc2.nextInt();
        System.out.println("固定资产编号为:"+year+type[i-1]+num);

    }
    /*
 1998
请选择产品类型(1. 台式机 2. 笔记本 3. 其他)
1
固定资产编号为:1998台式机980
*/
  1. 计算某年、某月、某日和某年、某月、某日之间的天数间隔和周数。
public static void main(String[] args) throws ParseException {
    System.out.println("请输入第一个日期(yyyy-MM-dd)");
    Scanner c =new Scanner(System.in);
    String str=c.nextLine();
    System.out.println("请输入第二个日期(yyyy-MM-dd)");
    String str1=c.nextLine();

//把字符串类型解析为Date类型
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");//格式化,并最终转化成Date
    Date d= sd.parse(str);//从字符中解析文本生成data
    Date d1=sd.parse(str1);

    long time;
    if(d.after(d1)){  //判断日期是否是在d1之后
        time =d.getTime()-d1.getTime();
    }else{
        time=d1.getTime()-d.getTime();
    }

    long a = 1000*60*60*24;//一天的时间
    long day = time/a;
    long week = day/7;

    System.out.println("两个日期相隔"+day+"天");
    System.out.println("相隔"+week+"周");
}

/*
请输入第一个日期(yyyy-MM-dd)
2019-03-05
请输入第二个日期(yyyy-MM-dd)
2019-04-09
两个日期相隔35天
相隔5周
*/
  1. 计算并输出21世纪的闰年,计算程序的执行时间。
public static void main(String[] args) {
        long begin = System.currentTimeMillis();
        GregorianCalendar gc = new GregorianCalendar();
        for (int i=2000;i<2100;i++){
            if (gc.isLeapYear(i)){
                System.out.print(i+"    ");
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("程序运行时间:"+(end-begin));
        /*
        2000    2004    2008    2012    2016
            2020    2024    2028    2032    2036
                2040    2044    2048    2052    2056  
                  2060    2064    2068    2072    2076  
                    2080    2084    2088    2092    2096
                        程序运行时间:25
*/
    }
  1. 编写一个程序,设定一个有大小写字母的字符串,先将字符串的大写字符输出,再将字符串中的小写字符输出。
  public static void main(String[] args) {
        String str = "HelloIHaveASuprise";
        StringBuilder s1 = new StringBuilder();//声明可变字符串,存储小写字符
        StringBuilder s2 = new StringBuilder();
        char ch[]=str.toCharArray();

        for (int i =0;i<ch.length;i++){
            if(ch[i]<'z'&&ch[i]>'a'){
                s1.append(ch[i]);//追加字符
            }
            if (ch[i]<'Z'&&ch[i]>'A'){
                s2.append(ch[i]);
            }
        }

        System.out.println("小写字符有:"+s1+"\n大写字符有:"+s2);
    }
    //小写字符有:elloveuprise
    //大写字符有:HIHS
  1. 编写程序,(Scanner)当以年-月-日的格式输入一个日期时,输出其该年是否为闰年,该月有几天,该日是星期几
public static void main(String[] args) throws ParseException {
    System.out.println("请输入一个日期:yyyy-mm-dd");
    Scanner sc = new Scanner(System.in);
    String str = sc.next();//获取输入日期

    SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd");
    Date d = df.parse(str);

    Calendar c = Calendar.getInstance();//默认为但当前时间
    c.setTime(d);//转换为Calendar

    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH)+1;
    int week = c.get(Calendar.DAY_OF_WEEK)-1;

    GregorianCalendar gc = new GregorianCalendar();
    if (gc.isLeapYear(year)){
        System.out.println(year+"是闰年");
    }
    else{
        System.out.println(year+"是平年");
    }

    int max = c.getActualMaximum(Calendar.DAY_OF_MONTH);

    String s = week==0? "周日" : "周"+week;//week从0开始

    System.out.println(month+"月有"+max+"天,该日是"+s);

 }
//请输入一个日期:yyyy-mm-dd
//1999-01-02
//1999是平年
//1月有31天,该日是周6
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值