【String类】常见操作,StringBuffer,StrignBuilder

常见操作

  • 创建:
String s = "abcdefg";
String s = new String("abcdefg");
String s = new String(buf,0,buf.length()); 
  • 内容查找
String s = "fasdfagas";
s.charAt(index);
s.startsWith("xx");
s.endsWith("xx");
s.contains("xx");
s.indexOf(key);
s.indexOf(key,startAt);
  • 切割
String s = "abc def ghe asd";
String[] s_split = s.split(" ");
s_sub = s.subString(start,end);
  • 数组和字符串的互换
char[] array = s.toCharArray();
s = new String(array);
  • 替换
s.replace("xx","xx");
s.replaceAll("xx","xx");

StringBuffer与StringBuilder

字符串基于final修饰的字符数组,不可对字符串进行增删改操作,上面两个哥们解决了这个问题,二者区别是StringBuffer加了锁,线程安全,StringBuilder在jdk1.5才出现,不同步,线程不安全。

整几个小demo

  • myTrim():消除子符串两头空格
public class demo1 {
	public static String myTrim(String s) {
		//首部
		int start = 0; 
		//尾部
		int end = s.length()-1;
		//遇到空格,头指针后移
		while(start<=end&&s.charAt(start)==' ') {
			start++;
		}
		//遇到空格,尾指针前移
		while(start<=end&&s.charAt(end)==' ') {
			end--;
		}
		//根据首尾指针切割字符串
		return s.substring(start, end+1);
	}
	public static void main(String[] args) {	
		String s = "   asdfa fasdf ";
		System.out.println('<'+myTrim(s)+'>');
	}
}
  • 字符串反转
/*将字符串反转,指定开始结束位置将字符串反转*/
public class demo2 {
	public static String reverseString(String s) {
		//字符串变字符数组
		char[] chs = s.toCharArray();
		//反转字符数组
		reverse(chs,0,s.length());
		//数组转字符串
		return new String(chs);
	}
	//反转从下标start开始,到end结束(不包含end)的指定范围内的字符
	public static String reverseString(String s ,int start ,int end) {
		//字符串变字符数组
		char[] c = s.toCharArray();
		//反转
		reverse(c,start,end);
		//数组转字符串
		return new String(c);
	}
	public static void reverse(char[] c,int start ,int end) {
		for(int s=start,e=end-1;s<e;s++,e--) {
			swap(c,s,e);
		}
	}
	public static void swap(char[] c ,int head,int tail) {
		char temp = c[head];
		c[head] = c[tail];
		c[tail] = temp;
	}
	public static void main(String[] args) {
		String s = "ab  cd";
		System.out.println(reverseString(s));
		System.out.println(reverseString(s,0,2));
	}
}
  • 统计字符次数
/*获取字符串中指定字符串出现的次数*/
public class demo3 {
	public static int countString(String s,String key) {
		//计数器
		int count = 0;
		//位置
		int index = 0;
		//从index处开始查key的索引,查到了将index移动key的长度位,下次从新的index往后查
		while((index =s.indexOf(key, index))!=-1) {
			count++;
			index+=key.length();
		}
		return count;
	}
	public static void main(String[] args) {
		System.out.println(countString("  absdkksfaskkfwekk  ","kk"));
	}
  • 公共子串
/*找两个字符串的最长公共子串*/
public class demo4 {
	public static String maxSubString(String s1,String s2) {
		//默认s2是较短的串
		/*
		将短串从整个串递减到只有单个字符,依次用contains在长串里找,找到了就返回,
		长度为length(),一个串
		长度为length()-1,有两个串,0-length()-2,1-length()-1
		长度为length()-2,有三个串,0-length()-3,1-length()-2,2-length()-1
		...
		*/
		for(int x = 0;x<s1.length();x++) {
			for(int y=0,z=s2.length()-x;z<=s2.length();y++,z++) {
				String temp = s2.substring(y, z);
				if(s1.contains(temp))
					return temp;
			}
		}
		return null;
	}
	public static void main(String[] args) {
		System.out.println(maxSubString("asdfaashellofaberegw", "ongweghello123"));
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值