Day14

一、笔记

String :不可变的字符序列  


可变的字符序列(字符串缓冲区)
StringBuffer   :线程安全   因为StringBuffer中加了很多很多很多的synchronized代码  效率低
StringBuilder  :线程不安全  效率最高


如果操作的字符串较少:使用String
如果操作的字符串多,但是保证字符串的安全:StringBuffer
如果操作的字符串多,要求效率:StringBuilder

 

递归:方法自己调用自己的方法
求出n的阶乘:

5!=5*4*3*2*1
4!=4*3*2*1
3!=3*2*1
2!=2*1
1!=1

5!=5*4!
4!=4*3!
3!=3*2!
2!=2*1!
1!=1

 

n!:n*(n-1)!

GregorianCalendar (公历)Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

注意:

    月份:一月是0,二月是1,以此类推,12月是11

    星期:周日是1,周一是2....周六是7

Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期

一月:January 二月:February 三月:March 四月:April 五月:May 六月:June 七月:July 八月:August 九月:September 十月:October十一月:November 十二月:December

File

java.io.File:文件和目录路径名的抽象表现形式

通过File对象可以访问文件的属性(读文件属性)

   public boolean canRead()  public boolean canWrite()

    public boolean exists()    public boolean isDircetory()

    public boolean  isFile()     public boolean isHidden()

    public long lastModified()   public long length()

    public String getName()    public String getPath()

通过File对象创建空文件或目录(在该对象所指的文件或者目录不存在的情况下)

public boolean createNewFile()throws IOException

public boolean  delete()

public boolean mkdir()mkdirs()

二、Demo

1.



public class Test1 {

	
	/*
	 * 分析以下需求,并用代码实现:
	(1)定义如下方法public static String getPropertyGetMethodName(String property);
	(2)该方法的参数为String类型,表示用户给定的成员变量的名字,返回值类型为String类型,
	返回值为成员变量对应的get方法的名字
	(3)如:用户调用此方法时给定的参数为"name",该方法的返回值为"getName"   
	 */
	public static String getPropertyGetMethodName(String property) {
		return "get"+property.substring(0,1).toUpperCase()+property.substring(1).toLowerCase();
	}
	public static void main(String[] args) {
		String pro = getPropertyGetMethodName("NAME");
		System.out.println(pro);
	}
}
public class Test2 {

	
	/*
	 * 分析以下需求,并用代码实现:
	(1)定义数字字符串数组{"010","3223","666","7890987","123123"}
	(2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,
	第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
	(3)如:010 是对称的,3223 是对称的,123123 不是对称的
	(4)最终打印该数组中对称字符串的个数
	
	提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
	 */
	public static void main(String[] args) {
		String[] s = new String[]{"010","3223","666","7890987","123123"};
		/*
		 * 如果字符串可以反转:简单啦
		 */
		
		for (int i = 0; i < s.length; i++) {
			for (int j = 0; j < s[i].length()/2; j++) {
				if(s[i].charAt(j) == s[i].charAt(s[i].length()-1-j)) {
					if(j==s[i].length()/2-1) {
						System.out.println(s[i]+"是对称");
					}
					continue;
				}else {
					System.out.println(s[i]+"不是对称");
					break;
				}
			}
			
			
		}
		
		
	}
}
public class Test3 {

	public static void main(String[] args) {
		/*
		 * 
		 * 
		 * 分析以下需求,并用代码实现:
	(1)从键盘循环录入一个字符串,输入"end"表示结束
	(2)将字符串中大写字母变成小写字母,小写字母变成大写字母,
	其它字符用"*"代替,并统计字母的个数
		举例:
			键盘录入:Hello12345World
			输出结果:hELLO*****wORLD
					  总共10个字母
		 */
		
		Scanner sc = new Scanner(System.in);
		String s = "";
		
		while(true) {
			System.out.println("请输入一个字符串");
			String ss = sc.next();
		
			if(ss.equals("end")) {
				char[]  charArray = s.toCharArray();//将字符串转换成字符数组 hello  h e l l o 
				for (int i = 0; i < charArray.length; i++) {
					if(charArray[i]>='A' && charArray[i]<='Z') {
						char lowerCase = Character .toLowerCase(charArray[i]);
						charArray[i]=lowerCase;
					}else if(charArray[i]>='a' && charArray[i]<='z') {
						char lowerCase = Character .toUpperCase(charArray[i]);
						charArray[i]=lowerCase;
					}else {
						charArray[i]='*';
					}
				}
				System.out.println(new String(charArray));
				break;
			}else {
				s=s+ss;
			}
			
		}
		
		
	}
}

 

package com.qfedu.tom.test;

public class Test4 {

	public static void main(String[] args) {
		String[] s = new String[]{"010","3223","666","7890987","123123"};
		StringBuilder sb =null;
		for (int i = 0; i < s.length; i++) {
			sb= new StringBuilder(s[i]);
			if(s[i].equals(sb.reverse().toString())) {
				System.out.println(s[i]+"是对称的");
			}else {
				System.out.println(s[i]+"不是对称的");
			}
		}
			
		
	}
}
package com.qfedu.tom.test;

public class TestStringBuffer {

	public static void main(String[] args) {
		StringBuffer  sb = new StringBuffer("abc");
		//增  删  修改 插 反转
		sb.append("de我哈哈哈哈哈");//追加字符串
		System.out.println(sb);
		sb.delete(1, 2);//删除字符串从第1个开始到第2个结束 不包括2
		System.out.println(sb);
		sb.deleteCharAt(4);//删除指定下角标的元素
		System.out.println(sb);
		sb.setCharAt(1, '你');//更改指定下角标的元素
		System.out.println(sb);
		sb.insert(3, "中国");//往指定下角标的位置插入一条数据
		System.out.println(sb);
		sb.reverse();//将字符串反转过来
		System.out.println(sb);
		//设置缓冲区长度
//		sb.setLength(2000);
//		System.out.println(sb);
		
	}
}

2.

package com.qfedu.zhuguangyi.digui;

public class A {

	
	public static void main(String[] args) {
		A a =new A();
		System.out.println(a.getJieCheng(4));
	}
	
//	public int getJieCheng(int n) {
//		int c = 1;
//		for (int i = n; i >=1; i--) {  
//			c=c*i; // 递推
//		}
//		return c;
//		
//	}
	//String StringBuffer  Integer   SimpleDateFormat   Calendar  类中常用方法 
	
	//递归处理阶乘问题
	public int getJieCheng(int n) {
		if(n==1) {
			return 1;
		}
		return n*getJieCheng(n-1);
	}
}

3.

package com.qfedu.zhuguangyi.date;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class TestCalendar {
	 
	 
	public static void main(String[] args) {
		
		//用来搭桥
		GregorianCalendar   gc = new GregorianCalendar ();
		gc.set(2018, 1, 15);//设置年月日
		gc.setTime(new Date());//直接设置日期
		Date date = gc.getTime();//获取桥中的日期
		System.out.println(date);
		System.out.println(gc.get(Calendar.YEAR));//获取年份
		System.out.println(gc.get(Calendar.MONTH));//获取月份
		System.out.println(gc.get(Calendar.DATE));//获取日期
		System.out.println(gc.get(Calendar.DAY_OF_MONTH));//获取当月的第几天
		System.out.println(gc.get(Calendar.DAY_OF_WEEK));//获取当前周的第几天
		System.out.println(gc.get(Calendar.DAY_OF_YEAR));//获取当前年的第几天
		System.out.println(gc.get(Calendar.WEEK_OF_MONTH));//获取当月的第几周
		//获取当前月份的最大天数
		System.out.println(gc.getActualMaximum(Calendar.DAY_OF_MONTH));
		gc.add(Calendar.YEAR, -10);//对当前年份加-10年
		gc.add(Calendar.MONTH, 2);//对当前月份加2月
		Date time = gc.getTime();//重新获取时间
		System.out.println(time);
		

		
	}

}
package com.qfedu.zhuguangyi.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDate {

	 
	public static void main(String[] args) throws Exception {
//		Date d = new Date();//获取当前系统时间
//		System.out.println(d);
		System.out.println(d.getYear()+1900);//2018  1900
		System.out.println(d.getDate());//15
		System.out.println(d.getMonth()+1);//9
//		//2018年 9月15日  :: 
		SimpleDateFormat//格式化日期类
//		SimpleDateFormat  sim = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss W");
//		String date11 = sim.format(d);//将日期以定义的格式进行转换,转换成字符串
//		System.out.println(date11);
		String s = "2019-6-6";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date111 = sdf.parse(s);//字符串转换成日期
		System.out.println(date111);
		 
		
		
		
		
		
	}
}
package com.qfedu.zhuguangyi.date;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
 
public class Test日历 {

	public static void main(String[] args) throws Exception {
		 
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入日期,格式为:yyyy-MM-dd");
		//应该定义日期
		String s = sc.next();
		SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
		Date date = sim.parse(s);//将字符串转换成日期类型
		
		GregorianCalendar gc = new GregorianCalendar();//搭桥:为了操作时间
		gc.setTime(date);//将转换后的时间放在桥上方便操作
		
		//获取当前日期
		int nowDate = gc.get(Calendar.DATE);
		
		//因为所有的月份都是从1号开始
		gc.set(Calendar.DATE, 1);//所以将日期设置为1号
		//获取当月的最大天数
		int maxDay = gc.getActualMaximum(Calendar.DAY_OF_MONTH);
		//获取当前日期在本周中的第几天
		int day = gc.get(Calendar.DAY_OF_WEEK);
		
		
		
		System.out.println("日\t一\t二\t三\t四\t五\t六");
		for (int i = 1; i <day; i++) {
			System.out.print("\t");
		}
		for (int i = 1; i <=maxDay; i++) {
			if(i==nowDate) {
				System.out.print("×");
			}
			System.out.print(i+"\t");
			//获取当前日期在本周的第几天
			int day2 = gc.get(Calendar.DAY_OF_WEEK);
			if(day2==Calendar.SATURDAY) {
				System.out.println();
			}
			//当前日期必须得+1
			gc.add(Calendar.DATE, 1);
			
		}
		
		
	}
}

乌云的背后是阳光,阳光的背后是彩虹!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值