zoukankan      html  css  js  c++  java
  • String

     

    String类不可变类
    字符串一旦初始化就不可以被改变。

    String类面试题
    	1.判断定义为String类型的s1和s2是否相等
    		String s1 = "abc";
    		String s2 = "abc";
    		System.out.println(s1 == s2); T					
    		System.out.println(s1.equals(s2)); 	T	
    	2.下面这句话在内存中创建了几个对象?
    		String s1 = new String("abc");       两个
        			
    	3.判断定义为String类型的s1和s2是否相等
    		String s1 = new String("abc");			
    		String s2 = "abc";
    		System.out.println(s1 == s2);    F		
    		System.out.println(s1.equals(s2));       T
    	4.判断定义为String类型的s1和s2是否相等
    		String s1 = "a" + "b" + "c";
    		String s2 = "abc";
    		System.out.println(s1 == s2);       T			
    		System.out.println(s1.equals(s2));       T
    	5.判断定义为String类型的s1和s2是否相等
    		String s1 = "ab";
    		String s2 = "abc";
    		String s3 = s1 + "c";
    		System.out.println(s3 == s2);        F													
    		System.out.println(s3.equals(s2));      T    
    
    构造函数
    	1.字节数组
    		byte[] arr = {97,98,99};
    		String str = new String(byte[])			//解码,让我们看的懂的,通过默认的编码表,将字节数组转换成字符串
    		String(byte[], String)				//解码,通过指定的编码表,将字节数组转换成字符串
    		String(byte[], int offset, int length, String)  //解码,截取字节数组,offset是开始索引,length是截取的长度
    	2.字符数组
    		String(char[])					//将字符数组转换成字符串
    		String(char[], int offset, int length)		//截取字符数组,offset是开始的索引,length是截取的长度
    String类的常用方法
    	1,判断
    		1.1 boolean equals(Object);			//判断传入的字符串是否与调用的字符串字符序列是否相同,相同就返回true否则false
    		1.2 boolean equalsIgnoreCase(string);		//判断传入的字符串是否与调用的字符串字符序列是否相同,不区分大小写,相同就返回true否则false
    		1.3 boolean contains(string);			//判断传入的字符串是否被调用的字符串包含
    		1.4 boolean startsWith(string);			//判断调用的字符串是否以传入的字符串开头
    		1.5 boolean endsWith(string);			//判断调用的字符串是否以传入的字符串结尾
    		1.6 boolean isEmpty();				//判断字符串是否为空
    
    	2,获取
    		2.1 int length();				//获取字符串的长度
    		2.2 char charAt(index);				//通过索引获取对应的字符
    		2.3 int indexOf(int ch);			//通过传入int数或者是字符找对应索引
    			int idnexOf(int ch,fromIndex);		//在指定fromIndex的位置查找传入的字符
    		2.4 int indexOf(string str);			//通过传入字符串查找字符串所对应的索引
    		    int idnexOf(string str,fromIndex);		//通过指定fromIndex的位置查找传入的字符串
    		2.5 int lastIndexOf(ch);			//通过传入的字符从后向前找字符的索引值,把从后向前第一次找到的索引值返回
    			int lastIndexOf(ch,fromIndex):		//通过指定fromIndex的位置,从后向前查找字符,把从后向前第一次找到的索引值返回
    		2.6 int lastIndexOf(string);			//通过传入的字符串,从后向前查找,将第一次找到字符串中第一个字符的索引返回
    			int lastIndexOf(string,fromIndex):	//通过指定fromIndex的位置,从后向前查找对应字符串,将第一次找到字符串中第一个字符的索引返回
    		2.7 String substring(start);			//通过传入的索引值开始向后截取,截取的是索引到length
    			String substring(start,end);		//通过传入的两个索引值截取,有开始有结尾,包含头不包含尾
    		
    	3,转换
    		3.1 byte[] getBytes();				//编码,让计算机看的懂的,用默认的编码表,将字符串转换成字节数组
    			byte[] getBytes(String)			//用指定的编码表进行编码
    		3.2 char[] toCharArray();			//将字符串转换成字符数组
    		3.3 static String copyValueOf(char[]);		//将字符数组转换成字符串
    		    static String copyValueOf(char[] data, int offset, int count);
    		    //将字符数组转换字符串,通过offset开始,截取count个
    		3.4 static String valueOf(char[]);		//将字符数组转换成字符串
    		    static String valueOf(char[] data, int offset, int count);
    		    //将字符数组转换字符串,通过offset开始,截取count个
    		3.5 static String valueOf(int);			//将一个int数转换成字符串
    			static String valueOf(double);
    			static String valueOf(boolean);
    				...
    			
    		3.6 static String valueOf(object);		
    			和object.toString():结果是一样的。
    		3.7 String toLowerCase():			//将字符串全部转换为小写
    			String toUpperCase():			//将字符串全班转换为大写
    		3.8 "abc".concat("kk");				//将两个字符串相连接,产生新的字符串
    		    
    	4,替换。
    		4.1 String replace(oldChar,newChar);		//将newChar替换OldChar,如果OldChar不存在,原字符串直接赋值给替换后字符串
    		4.2 String replace(string,string);		
    		
    	5,切割。
    		String[] split(regex);				//通过regex切割字符串,切割后会产生一个字符串数组
    		String s = "a b c d";
    		String[] arr = s.split(" ");
    		
    	6,去除字符串两空格。
    		String trim();							
    		
    	7,比较
    		String str = "ab";
    		String str1 = "bc";
    		int num = str.compareTo(str1);			//如果str比str1大的话,返回的正数
    								//如果str比str1小的话,返回负数
    								//如果str和str1相等就返回0
    

    StringBuffer的特点

    1,可以添加基本数据和引用数据。添加数据完毕,其实底层都是将其转成字符串进行使用。通过toString方法转成字符串。
    2,该容器和数组不一样,数组是固定长度的,而且只能添加同一类型。而StringBuffer长度是可变的,可以添加不同类型。类型一致的数据,可以使用数组,也可以StringBuffer。
    但是数组添加元素,可以保证数据的类型不变。而StringBuffer添加完数据,全变成字符串。
    3,StringBuffer可以对字符串进行修改。

    StringBuffer的常用方法
    	1,添加
    		1.1 StringBuffer append(int x);			//在缓冲区的末尾追加			
    		1.2 StringBuffer insert(int index,String str);	//在指定索引位置添加
    
    	2,删除
    		2.1 StringBuffer delete(int start, int end);	//包含头索引,不包含尾部索引
    		2.2 StringBuffer delete(0,sb.length);		//清空缓冲区
    		StringBuffer sb = new StringBuffer();
    		sb.append("aaaaa");
    		sb = new StringBuffer();
    		2.3 StringBuffer deleteCharAt(int index);	//根据指定的索引删除索引对应的元素				
            
    	3,修改
    	     3.1 StringBuffer  replace(int start,int end,string);//用String替换,包含头不包含尾	
                  3.2 void setCharAt(int index ,char);		//修改,把指定索引位置的值改成传入的char值		
                 3.3 StringBuffer reverse();			//将缓冲区的元素反转				
                 3.4 void setLength(int len);			//根据传入的len值截取缓冲区的长度					
            
    	4,查找
                 4.1 int indexOf(str);				//查找str在缓冲区第一次出现的位置
    		4.2 int lastIndexOf(str);			//从后向前查找查找str在缓冲区第一次出现的位置
    

     StringBuilder和StringBuffer
     1.StringBuilder和StringBuffer与String的区别
     StringBuilder和StringBuffeer是可变字符序列
     String是不变得,一但被初始化,就不能改变
      
     2.StringBuilder和StringBuffer的区别
     StringBuilder是线程不安全的,所以效率比较高,1.5版本出现
     StringBuffer是线程安全的,效率相对较低,1.0版本出现的

    ==和equals区别

    ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
    如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,
    例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的地址是否相等,这时候就需要用==操作符进行比较。
    equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。

    总结:

    1,只要访问到字符串中不存在的角标,就会在运行时期,发生该异常。

    s1.charAt(10);    //StringIndexOutOfBoundsException
    2,当要替换的字符不存在时,结果是原来的字符串。
    3,截取子字符串,当头尾角标相等时,结果是 “” 空字符串。
    4,截取子字符串,当开始角标等于长度时,结果是 "" 空字符串。

    在StringBuffer,StringBuilder中没有添加short,byte,的方法也就是说如果你添加的是byte或short会自动提升为int

  • 相关阅读:
    ndoejs解析req,伪造http请求
    ndoejs创建多重文件夹
    路径path的正则通配符-nodejs
    例题1.5 快速排序
    例题1.3 整数划分问题
    sdcf day4 qaq模拟赛总结
    P1168 中位数
    浅谈LCA
    sdcf day1 qwq比赛题解
    2019山东夏令营划水记
  • 原文地址:https://www.cnblogs.com/sooper/p/3408970.html
Copyright © 2011-2022 走看看