String和StringBuffer

一、String类--java.lang包

1、获取

    1)int length();//获取字符串长度,此处是个方法,而数组的长度是属性
    2)char charAt(int index);//获取角标index处的字符
    3)int indexOf(int ch);//正向索引,返回字符ch第一次出现的角标,如果没有就返回-1
    4)int indexOf(int ch, int fromIndex);//正向索引,返回fromIndex角标开始字符ch第一次出现的角标
    5)int indexOf(String str);//正向索引,返回字符串str第一次出现的角标
    6)int indexOf(Strng str, int fromIndex);//正向索引,返回fromIndex角标开始字符串str第一次出现的角标
    7)int lastIndexOf(int ch);//反向索引,返回字符ch第一次出现的角标
    8)int lastIndexOf(int ch, int fromIndex);//反向索引,返回fromIndex角标开始字符ch第一次出现的角标
    9)int lastIndexOf(String str);//反向索引,返回字符串str第一次出现的角标
    10)int lastIndexOf(String str, int fromIndex);//反向索引,返回fromIndex角标开始字符串str第一次出现的角标

2、判断

    1)boolean isEmpty();//是否是空的
    2)boolean startsWith(String prefix);//是否以特定字符串开头,在文件处理中应用较多
    3)boolean endsWith(String suffix);//是否以特定字符串结尾,在文件处理中应用较多
    4)boolean equals();//是否相等
    5)boolean equaslIgnoreCase();//忽略大小写,判断是否相等。先调用toUpperCase()或者toLowerCase()然后调用equals()方法
    5)boolean contains(CharSequence s);//是否包含某个char值序列。底层调用的是indexOf方法,如果返回值不是-1,那么就包含,返回true,否则返回false

3、转换

    1)字符串转成字符数组
    char[] toCharArray();
    2)字符串转成字节数组
    byte[] getBytes();
    3)字符数组转成字符串
    构造函数:
    String(char[] arr)
    String(char[] arr, int offset, int count)//将arr的offset开始的count长度字符数组转成字符串
    静态函数:
    static String valueOf(char[] arr)
    static String valueOf(char[] arr, int offset, int count)
    该方法可以将基本数据类型转成字符串
    valueOf(int/short/byte/boolean/char[]/double/float/long num)
    static String copyValueOf(char[] arr)
    static String copyValueOf(char[] arr, int offset, int count)

4、替换

    1)void replace(char oldChar, char newChar);//新的字符替换旧的字符
    2)void replace(CharSequence target, CharSequence replacement);//是前面替换后面
    3)void replaceAll(String reex, String replecement)

5、子串  

    String substring(int fromIndex, int toIndex);//返回从fromIndex到toIndex-1的子串

6、切割  

    String[] split(String regex);//使用regex分割
    String[] split(String regex, int limit);//使用正则表达式进行切割
    String[] split(" +");和split("\\s+");//都是用一个或多个空格进行切割

7、小方法

    int compareTo(String s);//返回二者第一个不相同字符的ASCII码的差值
    String toUpperCase();//全部转成大写
    String toLowerCase();//全部转成小写
    String trim();//去除字符串两端的空格

二、StringBuffer/StringBuilder类--java.lang包

    是一个容器,可以看成是缓冲区,长度可变,可以直接操作多个数据类型,最终可以通过toString()方法变成字符串。当输入数据类型不确定,长度也不确定的时候,就使用缓冲区。StringBuilder是1.5版本才出现的,不支持线程同步,效率高,以后还是使用StringBuilder
    java中的升级:
    1)提高安全性能
    2)简化书写
    3)提高效率

方法:

1、增加

    StringBuffer append(boolean/char/double/float/int/long/Object/String/StringBuffer obj)
    增加元素返回的还是这个容器
    StringBuffer append(char[] arr)
    StringBuffer append(char[] arr, int offset, int len)

2、删除

    StringBuffer delete(int fromIndex, int toIndex);//删除fromIndex到toIndex-1
    StringBuffer deleteCharAt(int index);//删除指定角标处的元素

3、修改

    void setCharAt(int index, char ch);//将index处的元素设置为ch

4、插入

    StringBuffer insert(int index, Object/boolean/char/double/float/int/long/String/char[] obj);//在index处插入相应元素

5、获取

    int length();//获取长度
    char charAt(int index);//获取index处的字符
    int indexOf(String str);
    int indexOf(String str, int fromIndex);
    int lastIndexOf(String str);
    int lastIndexOf(String str, int fromIndex);
    void getChars(int srcBegin, int srcEnd, char[] dest, int destBegin)
    将srcBegin到srcEnd-1的元素存到字符数组dest的destBegin开始的位置

6、反转

    StringBuffer reverse();

7、转成字符串

    String toString();

8、子串

    String substring(int fromIndex, int toIndex);//获取从fromIndex到toIndex-1的子串

9、替换

    StringBuffer replace(int start, int end, String str);//用str替换start到end-1

代码:

class ReviewString
{
	//去除字符串两端的空格
	public static String myTrim(String s)
	{
		//设置两个指针,一个是从开头遍历,一个是从结尾遍历,直到不是空格,返回子串
		int start = 0, end = s.length()-1;

		//首先要保证start<=end,防止角标越界
		while(start <= end && s.charAt(start) == ' ') 
		{
			start++;
		}
		while(start <= end && s.charAt(end) == ' ')
		{
			end--;
		}

		return s.substring(start, end+1);
	}

	//将字符串进行反转
	public static String strReverse(String s)
	{
		//字符串反转就是将两头的元素进行互换
		//先将字符串转成字符数组
		//然后调用字符数组的反转方法
		char[] arr = s.toCharArray();
		charArrayReverse(arr);

		//将字符数组转成字符串返回
		return new String(arr);
	}

	//字符数组反转方法
	public static void charArrayReverse(char[] arr)
	{
		//字符数组反转就是两头元素进行位置互换
		int start = 0, end = arr.length-1;

		while(start < end)
		{
			swap(arr, start, end);
			start++;
			end--;
		}
	}

	//将字符串特定字段进行反转
	public static String strReverse(String str, int fromIndex, int toIndex)
	{
		//一般都是包含头不包含尾
		//将特定字段进行反转,其实就是将这段内容进行首尾互换
		//将字符串转成字符数组
		char[] arr = str.toCharArray();

		//将字符数组的特定字段进行反转
		charArrayReverse(arr, fromIndex, toIndex);

		//将字符数组变成字符串返回
		return new String(arr);
	}

	//将字符数组特定字段进行反转
	public static void charArrayReverse(char[] arr, int fromIndex, int toIndex)
	{
		//将特定字段首尾互换
		//定义两个指针,一个从fromIndex开始,一个从toIndex-1开始
		int start = fromIndex, end = toIndex-1;

		while(start < end)
		{
			swap(arr, start, end);
			start++;
			end--;
		}
	}

	//交换数组两个元素
	public static void swap(char[] arr, int i, int j)
	{
		char temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}

	//获取两个字符串中最大的相同子串
	public static String getMaxSubstring(String s1, String s2)	
	{
		//求出两个字符串中较短的字符串,作为参考标准
		String max = (s1.length() > s2.length())? s1: s2;
		String min = (max == s1)? s2: s1;

		//获取较短字符串的子串,判断较长字符串是否包含该子串
		for(int i = 0; i < min.length(); i++)
		{
			for(int j = 0; j < i+1; j++)
			{
				String sub = min.substring(j, j+min.length()-i);
				if(max.contains(sub))
					return sub;
			}
		}

		return null;
	}
	
	//获取一个字符串在另一个字符串中出现的次数
	public static int getCount(String s, String key)
	{
		if(s == null || s.length() == 0|| key == null || key.length() == 0)
			return 0;

		//使用contains只能判断是否存在并不能得到次数
		//因此使用indexOf(String str, int offset)求次数
		//初始化次数
		int count = 0;
		//初始化角标偏移位
		int offset = 0;
		//初始化key出现的角标
		int index = 0;

		while((index = s.indexOf(key, offset)) != -1)
		{
			count++;
			offset = index + key.length();
		}

		return count;
	}
	
	//反转整数
	//比如:321 -> 123, -123 -> -321
	public static int reverseInt(int num)
	{
		//定义num的符号,正数对应1,负数对应-1
		int flag = (num > 0)? 1: -1;
		//求出num的绝对值
		num = Math.abs(num);

		//将int数值转成String
		String s = Integer.toString(num);
		StringBuilder sb = new StringBuilder(s);

		//获取反转整数,为防止溢出,返回long型
		long n = flag * (Long.parseLong(sb.reverse().toString()));

		if(n >= Integer.MIN_VALUE && n <= Integer.MAX_VALUE)
			return (int)n;

		return 0;
	}

	public static void main(String[] args)
	{
		//测试去除字符串两端空格
		String s1 = " I am a student   ";
		System.out.println("("+s1+")去除空格后为:"+"("+myTrim(s1)+")");

		//测试反转字符串
		String s2 = "hello, world";
		System.out.println(s2+"反转后是:"+strReverse(s2));
		
		//测试字符串特定字段进行反转
		System.out.println(s2+"3~6进行反转后是:"+strReverse(s2, 3, 7));

		//测试求两字符串最长子串
		String s3 = "helloworld";
		String s4 = "kklololwd";
		System.out.println(s3+"和"+s4+"最长子串是:"+getMaxSubstring(s3, s4));

		//测试一个字符串在另一个字符串中出现的次数
		String s5 = "haaabcalkraajkjaa";
		String key = "aa";
		System.out.println(key+"在"+s5+"中出现的次数为:"+getCount(s5, key));

	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值