javase学习历程:“面试专用类”String类型的了解及使用

Sring 类
什么是String类
String类是定义在lang包下的一个类,不是基本数据类型
创建方法:
String str = new String(“abc”);
String str1 = “abc”;
jdk1.8的String类的底层是一个char类型的数组,1.9的string底层是byte数组

自定义类型指向的是堆地址,但是如果常量池内有相同的字符串,就在栈区创建一个他的引用
八种基本类型在栈内,但是指向常量池
双等号判断引用是否相等,equals判断内容是否相等
对字符串处理的类有:
String:不能改变(不是因为String前面加了final关键字而是因为多数对字符串操作的方法最后都是new String(),处于一个新的堆区,已经是另外一个字符串),一旦创建,不能修改;
final关键字
加在class(类名)之前:不能被继承
加在method之前:不能被重写
加在变量前:不能被修改

StringBuffer(最安全):synchronized是同步符,访问标有synchronized关键字方法是需要排队的,但是效率会低,但这个线程是安全的

StringBuild(稍微安全):效率比StringBuffer要高一点
StringBuffer和StringBuild有同一个父类:AbstractStringBuilder
String 类的equals()方法是重写了object的equals()方法,如果要比较其他类型对象是否相等就必须在类型中重写object的equals()方法

String一些方法与题目

package test;

import java.io.UnsupportedEncodingException;
import java.util.Scanner;

public class Test3 {
	//定义了去出字符串右边空格的方法
	public static String rtrim(String str) {
		int index=0;
		str=new StringBuffer(str).reverse().toString();
		for (int j = 0; j < str.length(); j++) {
		if (str.charAt(j)!=' ') {
			break;
			}
		index++;
	}
		str=str.substring(index);
		str=new StringBuffer(str).reverse().toString();
		return str;
	}
	//定义一个倒转字符串并连接原字符串的方法
	public static String concat(String str){
		String rts=new StringBuffer(str).reverse().toString();
		return str+rts;
	}
	//定义一个字符串右移的方法
	public static String moveToRight(String str,int position){
		String left= str.substring(0, str.length()-position);
		String right= str.substring(str.length()-position);
		return right+left;
	}
	//定义一个判断最长字符串的方法
	public static String longest(String str[]){
		String longest="";
		for(int i=0;i<str.length;i++){
			if(str[i].length()>longest.length()){	
				longest = str[i];	
			}	
		}
		return longest;
	}
	//从一个源字符串中, 找到一个相同的字符串(忽略大小写), 则返回第一个字符的索引位置
	public static int first(String str,String strsame){
		if(str.toLowerCase().contains(strsame.toLowerCase())){
			return str.toLowerCase().indexOf(strsame.toLowerCase());
		}else {
			return -1;
		}
	}
	//回文
	public static void back(String str){
		if (str.equals(new StringBuffer(str).reverse().toString())) {
			System.out.println("是回文");
		}else {
			System.out.println("不是回文");
		}
	}
	//
	public static void main(String args[]){
		//双等号用来判断引用是否相等,equals用来判断真实值是否相等
		String str1="abc";
		String str2="abc";
		String str3=new String("abc");
		System.out.println(str1==str2);
		System.out.println(str1.equals(str2));
		System.out.println(str1==str3);
		System.out.println(str1.equals(str3));
		
		//字符串转换为字符数组
		String str4="hello world";
		char [] arr=str4.toCharArray();
		for (char c : arr) {
			System.out.println(c);
		}
		//字符串的截:取前极限
		String sub=str4.substring(4, 7);
		String sub1=str4.substring(4);
		System.out.println(sub);
		System.out.println(sub1);
		//字符串以一个关键符分割成数组(两组例子)
		String[] split1=str4.split(" ");
		System.out.println(split1[0]+":"+split1[1]);
		String str5="1,2,3,4,5,6,78,99";
		String[] split2=str5.split(",");
		for (String string : split2) {
			System.out.print(string+" \t");
		}
		//大小写切换和识别字符串首尾字段
		String str6="abcd";
		String s1=str6.toUpperCase();
		System.out.println(s1+":"+s1.toLowerCase());
		String str7="adwwend";
		if (str7.startsWith("ad")) {
			System.out.println("添加");
		}
		if (str7.endsWith("end")) {
			System.out.println("删除");

		}
		//字符串转换为字符数组注意中文是存在乱码问题的所以要转换编码,也要捕获异常
		String str8= "hello world";
		byte [] byt=str8.getBytes();
		for (int i = 0; i < byt.length; i++) {
			System.out.print(byt[i]+"\t");
		}
		String str9="你好";
		try {
			String st=new String(str9.getBytes("ISO-8859-1"),"utf-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}finally{
		}
		//获取字符串长度,判断是否为空,检查字符串中的特定字符
		String str10="abc";
		System.out.println(str10.length());
		System.out.println(str10.isEmpty());
		if ("abc".equals(s1)) {
			System.out.println("true");			
		}
		char c =str10.charAt(2);//取索引对应的值
		System.out.println(c);
		
		String str11="watermemotlen";
		int t=str11.indexOf("r", 4);//可以取到下标极限,如果字符串中没有找到内返回-1
		int s=str11.lastIndexOf("t",2);
		System.out.println(t+"+"+s);
		
		
		//1.字符串解析,现有一字符串,"卡巴斯基#杀毒软件#免费版#俄罗斯#",解析出每个元素。
		String str12="卡巴斯基#杀毒软件#免费版#俄罗斯#";
		String []splot4=str12.split("#");
		for (String string : splot4) {
			System.out.print(string+"\t");
		}
		
		//2."那车水马龙的人世间,那样地来 那样地去,太匆忙"最后一次出现"那"的位置。
		String str13="那车水马龙的人世间,那样地来 那样地去,太匆忙";
		int n=str13.indexOf("那", 11);
		System.out.println(n);
		
		//3.判断输入的字符串是否是 .java 结束
		Scanner kb =new Scanner(System.in);
		String str14=kb.nextLine();
		if (str14.endsWith(".java")) {
			System.out.println("over");
		}
		//4.有一身份证号,判断此为男还是女,基于此方法,写一个算法,判断一个身份证号为男还是女\
		String str15=kb.nextLine();
		if (1==str15.charAt(17)%2) {
			System.out.println("男");
		}
		//5.有如下格式的字符串name-age-sex-address,解析出姓名,年龄等信息。
		String str="张-21-男-火车站";
		String[] split= str.split("-");
		System.out.println("姓名"+split[0]+" 年龄"+split[1]+" 性别"+split[2]+" 地址"+split[3]);
		//6.求出字符串中有多少种字符,以及每个字符的个数,例如有字符串 str="apple is a apple.";
		int a=0;
		int p=0;
		int l=0;
		int e=0;
		int I=0;
		int s11=0;
		int index=0;
		int dex=0;
		String str111="apple is a apple.";
		char arr1[]=str111.toCharArray();
		for (int i = 0; i < arr1.length; i++) {
			if ('a'==arr1[i]) {
				a++;
			}
			if ('p'==arr1[i]) {
				p++;
			}
			if ('l'==arr1[i]) {
				l++;
			}
			if ('e'==arr1[i]) {
				e++;
			}
			if (' '==arr1[i]) {
				index++;
			}
			if ('i'==arr1[i]) {
				I++;
			}
			if ('s'==arr1[i]) {
				s11++;
			}
			if ('.'==arr1[i]) {
				dex++;
			}
		}
		System.out.println("a="+a+" p="+p+" l="+l+" e="+e+" Kongge="+index+" I="+I+" s="+s11+" .="+dex);
	
		//7定义一个方法,用来去掉字符串右边的空格
		String str16="asd  ";
		System.out.println(rtrim(str));
		
		
		//8.定义一个方法,将str所指字符串的正序和反序进行连接,例如 "ok"->"okko" :String concat(String str);
		String str17="ok";
		System.out.println(concat(str17));
		
		
		//9.字符串右移n位,例如   "hello world" 右移两位 后ldhello wor,要求写一个方法实现此功能,方法的格式是
		//String moveToRight(String str,int position)
		//str:需要移动的字符串
		//p:右移的位数
		String str18="hello world";
		System.out.println(moveToRight(str18, 2));
		//	10.求5个字符串中最长的那个,把最长的字符串打印出来
			String str19 = "afaegte";
			String str20 = "sadlkfjoei";
			String str21 = "sjfaak";
			String str22 = "sadf";
			String str23 = "a;fj;a;";
			String str1111 [] = {str19,str20,str21,str22,str23};
			System.out.println(longest(str1111));

		
		//	11.若可以从一个源字符串中, 找到一个相符的字符串(忽略大小写), 则返回第一个字符的索引位置,否则返回-1。
		//	int stringAt(String str,String subStr)
			String str24 = "asdgafHellosldfld";
			String subStr = "hello";
			System.out.println(first(str24,subStr));
			String subStr2 = "fklashf";
			System.out.println(first(str24,subStr2));
			
		//	12.判断一个字符串是否是回文
			String str25 = "12321";
	        back(str25);
	        String str26 = "dsad";
	        back(str26);

			
		//	13.如下字符串,01#张三#20*02#李四#30*03#王五#40。。。。。。,解析每个人分数多少。样式如下:
		//	01 张三 20
		//	02 李四 30
		//	03 王五 40。并且计算总分
	       String str27="01#张三#20*02#李四#30*03#王五#40";
	       String strrr[]=str27.split("[*]");
	       for (int j = 0; j < strrr.length; j++) {
			strrr[j]=strrr[j].replace("#", " ");
			System.out.println(strrr[j]);
		}
	}
	
}

具体String内容:String类面试题有道云笔记分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值