Java包装类、序列化、String类常用方法

Java一些问题总结

##1. 包装类的享元模式
顾名思义:共享元对象。如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用创建新的对象。

测试:
	String num="abs";
	String num1="acd";
	String num2=new String(" 67 89 we asffds ert ");
	//打印  logger  debug
	System.out.println(Integer.toHexString(num.hashCode()));
	System.out.println(Integer.toHexString(num1.indexOf('a')));
	System.out.println(Integer.toHexString(num2.charAt(3)));
	结果:
		17872
		0
		20

享元模式是为数不多的、只为提升系统性能而生的设计模式。它的主要作用就是复用对象,以节省内存空间和对象创建时间。

##2. 什么是Java对象序列化
Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。

使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。

除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。Java序列化API为处理对象序列化提供了一个标准机制,该API简单易用。

##3. String类的常用方法
###⑴ length()字符串的长度

	String num="6789";
	System.out.println(num.length());
	输出结果为:4

###⑵ charAt()截取一个字符

	String num1="abcd";
	System.put.println(num1.charAt(2)); //括号中为索引号
	结果为:c 

###⑶ toCharArray()转换为字符数组

	String num1="afsg";
	System.out.println(num1.toCharArray());
	结果为:afsg

###⑷ equals()和equalsIgnoreCase()比较两个字符串

	String a="Hello";
	String b="Hello";
	String c="World";
	String d="HELLO";
	System.out.println(a.equals(b));
	System.out.println(a.equals(d));
	System.out.println(a.equals(c)); //比较字符串及其长度,并且区分大小写
	
	//比较字符串及其长度,并且不区分大小写
	System.out.println(a.equalsIgnoreCase(d));
	结果为:true false false true

###⑸ startsWith()方法决定是否以特定字符串开始

	System.out.println(a.startsWith("He"));或者System.out.println(a.startsWith(b));
	结果是:true

###⑹ endWith()方法决定是否以特定字符串结束

	System.out.println(a.endsWith("d"));
	结果是:false

###⑺ compareTo()和compareToIgnoreCase() 比较字符串

	String s1 = "adger";  
	String s2 = "adgerfa";  
	String s3 = "ADGER";  
	String s4 = "adher";  
	System.out.println(s1.compareTo(s2));//-2  
	System.out.println(s1.compareTo(s3));//32  
	System.out.println(s1.compareToIgnoreCase(s3));//0  
	System.out.println(s3.compareToIgnoreCase(s4));//-1 

compareTo()的返回值是int,它是先比较对应字符的大小(ASCII码顺序)
1、如果字符串相等返回值0

2、如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)(负值代表:前字符串的值小于后字符串,正值代表:前字符串大于后字符串)

3、如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度.
compareToIgnoreCase()方法是不区分大小写,返回值是int,比较方式与compareTo()相同

	package lulu1;
	import java.util.Arrays;
	import java.util.Scanner;

	/**
	 * 比较输入字符串的大小:不分大小写,按照字符串的大小排序 
	 * @author chenglulu
	 *
	 */
	public class Compare {
		public static void main(String[] args) {
		Scanner  sc=new Scanner(System.in);
		System.out.println("请输入要比较的字符串:");
		String input=sc.nextLine();
		String[] s = input.trim().split(" "); //trim()是把开头和结尾的空格去掉
		for(int i=0;i<s.length-1;i++){
			for(int j=0;j<s.length-1-i;j++){
				if(s[j].compareToIgnoreCase(s[j+1])>0){
					String temp = s[j];
					s[j]=s[j+1];
					s[j+1]=temp;
				}
				
			}
		}
		System.out.println(Arrays.toString(s));
	}
	}

  
	//测试  
	//输入:   fas rew ada ADE FAA re bci def BCr aC Bc    
	//输出:aC ada ADE Bc bci BCr def FAA fas re rew  

###⑻ indexOf() 查找字符或者子串第一次出现的地方。

	package lulu1;

	import java.util.Scanner;
	/**
	 * 查找字符或字符串第一次出现的地方
	 * @author chenglu
	 *
	 */
		public class Date {
		public static void main(String args[]){
			Scanner sc=new Scanner(System.in);
			System.out.println("请输入一个字符串:"); 
			String input =sc.nextLine();
			System.out.println(input.indexOf("sed"));  //不存在的话,返回-1
			System.out.println(input.indexOf('a'));  //存在的话,返回相应的索引值
		}
	}

###⑼ lastIndexOf() 查找字符或者子串是后一次出现的地方。

import java.util.Scanner;
/**
 * 查找字符或字符串最后一次出现的地方
 * @author chenglu
 *
 */
public class Date {
	public static void main(String args[]){
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入一个字符串:"); 
		String input =sc.nextLine();
		System.out.println(input.lastIndexOf('s'));  //不存在的话,返回-1
		System.out.println(input.indexOf('a'));  //存在的话,返回相应的索引值
	}
}

###⑽ substring()截取字符串

System.out.println(input.substring(2, 6));  //返回索引为2到5的值
结果为:请输入一个字符串:qwerasdf
	   eras

###⑾ replace() 替换

	String a="wertqwertq";
	System.out.println(a.replace("tq", "asdf"));//全部替换
	System.out.println(a.replaceFirst("w", "mnbv")); //只替换第一个w
	System.out.println(a.replaceAll("w", "123456"));//全部替换
		

结果为:
这里写图片描述
###⑿ concat() 连接两个字符串

	String s="123456";
	String s1="78987";
	System.out.println(s.concat(s1));
		结果为:12345678987

###⒀ trim() 去掉起始和结尾的空格

	String d=" as df gh we  qw sd df as ";
	System.out.println(d.trim());//把开始和结尾的空格去掉
	结果为:as df gh we  qw sd df as

###⒁ toLowerCase()/ toUpperCase() 大小写

	String  b="asdfghjk";
	String c="ASDFGHJ";
	System.out.println(b.toUpperCase());
	System.out.println(c.toLowerCase());
	System.out.println(s.toLowerCase());
		结果为:
			ASDFGHJK
			asdfghj
			123456	

###⒂ split(String str)//将str作为分隔符进行字符串分解

		String d="as df gh we  qw sd df as ";
		String[] ss = d.split(" ");
		
		System.out.println(d.split(" ")); //输出地址
		System.out.println(ss); //输出地址
		System.out.println(Arrays.toString(ss)); //输出数组
		结果为: [Ljava.lang.String;@39e5b5
				[Ljava.lang.String;@117f31e
				[as, df, gh, we, , qw, sd, df, as]

Guess you like

Origin blog.csdn.net/qq_39650208/article/details/76276971