Java基础——常用类

一、String
 字符串在底层是以字符数组char[]存储的,是不可变的字符序列,字符串一旦创建就不能改变,例如:

String str1 = ”abc”;//①
String str2 = str1;//②
str1 = ”deg”;//③

 此时str2的值还是abc,执行②的时候,str1将地址值传递给str2,此时,str1和str2都指向”abc”;当执行③时,并不是改变了原来的”abc”,而是另外创建了”deg”,而使str1指向新建的”deg”,由于str2的地址值并没有改变,所以str2的值还是”abc”。
String str1 = "abc" + "def";这种写法和String str2 = "abcdef";是一样的,此时str1 == str2;
 因此要尽可能的防止字符串的胡乱拼接,这会创建出很多的String对象,会导致系统性能下降,尤其是在庞大的循环语句中。
 字符串与其他类型数据的转换:
  1、字符串与基本数据类型、包装类之间转换:
   ①字符串 —>基本数据类型、包装类:调用相应的包装类的parseXxx(String str);
   ②基本数据类型、包装类—>字符串:调用字符串重载的valueOf()方法
  2、字符串与字节数组间的转换
   ①字符串—>字节数组:调用字符串的getBytes();
   ②字节数组—>字符串:调用字符串的构造器
  3、字符串与字符数组间的转换
   ①字符串—>字符数组:调用字符串的toCharArray();
   ②字符数组—>字符串:调用字符串的构造器
  4、String与StringBuffer的转换
   ①String —>StringBuffer:使用StringBuffer的构造器:new StringBuffer(String str);
   ②StringBuffer—>String:使用StringBuffer的toString()方法
  TIP:字符串类型也可以转为boolean类型:Boolean.parseBoolean(str);
  5、StringBuffer和StringBuilder
   StringBuffer类:可变的字符序列,可以增删单个字符或字符串来改变长度,StringBuffer可看作是一个容器,当调用StringBuffer的空参构造器new StringBuffer()的时候实际上他的空间长度是16,但并不是说它的length()值是16,length()值与它存放的内容有关,StringBuffer在创建的时候也可以指定长度new StringBuffer(长度值);StringBuffer在底层的存储还是字符数组,集合ArrayList(动态数组)在底层是以Object[]数组的形式存储,空参构造时的长度是10。
   StringBuffer的append()方法可以连用:sb.append(“aba”).append(“234”);
   StringBuilder类:可变的字符序列(jdk5.0新加入的,效率更高,线程不安全)
   常用的方法:

append(...);//添加
delete(int startIndex, int endIndex);//删除
setCharAt(int n ,char ch);//修改
charAt(int index);//查询
insert(int index, String str);//插入
reverse();//反转
length();//长度

  注意:StringBuffer在执行reverse()方法的时候会把自身反转
 compareTo(String str)方法的原理:
  取出当前字符串序列和形参字符串序列的长度,再取出较小的长度,从第一个位置开始比较每个位置上的字符,直到字符不同的时候,作差返回一个int值,如果比较完较小长度的每个字符之后发现每个位置上的字符都相等,则再比较两个字符串的长度,返回长度的差值。该方法主要用于字符串排序。
 一些字符串相关的自定义工具方法:
  ①自定义trim:

public static String myTrim(String str){
	int start = 0;
	int end = str.length() - 1;
	while(start < end && str.charAt(start) == ' ')
		start++;
	
	while(start < end && str.charAt(end) == ' ')
		end--;
		
	return str.substring(start,end + 1);
}

  ②实现字符数组中任意区段的反转,并以字符串的形式返回的方法:

public static String reverseArray(char[] c, int start, int end) {
	for (int i = start, j = end; i < j; i++, j--) {
		c[i] = (char) (c[i] ^ c[j]);
		c[j] = (char) (c[i] ^ c[j]);
		c[i] = (char) (c[i] ^ c[j]);
	}
	return new String(c);
}

  ③获取一个字符串在另一个字符串中出现的次数:

public static int getTime(String str1, String str2) {
	int count = 0;
	int len;
	while ((len = str1.indexOf(str2)) != -1) {
		count++;
		str1 = str1.substring(len + str2.length());
	}
	return count;
}

  ④求两个字符串的最大子串的程序:可能有多个长度相同的子串,因此返回值为List<String>

public static List<String> getMaxSubString(String str1, String str2) {
	String maxStr = (str1.length() > str2.length()) ? str1 : str2;
	String minStr = (str1.length() < str2.length()) ? str1 : str2;
	int len = minStr.length();
	List<String> list = new ArrayList<>();
	for (int i = 0; i < len; i++) {
		for (int x = 0, y = len - i; y <= len; x++, y++) {
			String str = minStr.substring(x, y);
			if (maxStr.contains(str)) {
				list.add(str);
			}
		}
		if (list.size() != 0) {
			return list;
		}
	}
	return null;
}

二、时间、日期类
 1、System.currentTimeMillis():返回当前时间的时间戳,此值是从1970年1月1日0点0分00秒开始到当前时间的毫秒数,是long型的正数,此方法常用来计算时间差
 2、java.util.Date

Date d = new Date();//返回当前时间的Date:Mon May 12 15:17:01 CST 2014
Date d1 = new Date(15231512541241L);//返回形参处时间戳对应的日期

 3、java.text.SimpleDateFormat
  格式化:日期—>文本,使用SimpleDateFormat的format()方法
  解析:文本—>日期,使用SimpleDateFormat的parse()方法

//格式化1:默认格式
SimpleDateFormat sdf = new SimpleDateFormat();
String date = sdf.format(new Date());
System.out.println(date);//14-5-12 下午3:24

//格式化2:指定格式
SimpleDateFormat sdf1 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
date = sdf1.format(new Date());
System.out.println(date);//星期一, 12 五月 2014 15:29:16 +0800(东八区)

//解析:
Date date1 = sdf.parse("14-5-12 下午3:24");
System.out.println(date1);
date1 = sdf1.parse("星期一, 12 五月 2014 15:29:16 +0800");
//date1 = sdf1.parse("14-5-12 下午3:24");
System.out.println(date1);

 4、Calendar(日历)
  获取实例:Calendar c = Calendar.getInstance();
  常用api:get()/set()/add()/date getTime()/setTime()

三、Math
 Random类的Random.nextInt(max);表示随机返回一个[0, max)之间的整数,注意不包括max,要想返回从1开始的整数则需再+1,Math.random()返回的是[0,1)之间的小数

Math.random();//获取一个随机小数

四、Runtime
 Runtime类中的方法可以启动一些系统中的资源,比如用浏览器打开一个网站、启动资源管理器等

Runtime rt1 = Runtime.getRuntime();
Runtime rt2 = Runtime.getRuntime();
System.out.println(rt1);
System.out.println(rt2);// rt1 == rt2
try {
	// r1.exec("explorer");//启动资源管理器
	r1.exec("explorer http://baidu.com");// 启动浏览器并打开网址
} catch (Exception e) {
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值