【Java】编写一个方法,实现基本的字符串压缩功能

原创 2015年07月07日 15:34:14

利用重复字符出现的次数,编写一个方法,实现基本的字符串压缩功能。

例如,字符串aabcccccaaa会变为a2b1c5a3。若压缩后的字符串没有变短,则返回原先的字符串。

StringBuffer:

如果频繁地对字符串进行拼接,直接用“+”的话会建立很多String型的对象,对服务器资源和性能是不小的开销,例如下面的代码:

	public String compressBad (String str)
	{
		String mystr = " ";
		int count = 1;
		char last = str.charAt(0);
		for (int i = 1; i < str.length(); i++)
		{
			if (last == str.charAt(i))
			{
				count++;
			}
			else
			{
				mystr += last + count;
				last = str.charAt(i);
				count = 1;				
			}
		}
		return mystr += last + count;
	}


其实这种情况下可以使用StringBuffer。StringBuffer量随着内部存储的字符串长度而翻倍增大,会先建立一个能容纳所有字符的数组,容等拼接完成再将这些字符串转成一个字符串。而且StringBuffer比起StringBuilder是线程安全的。

public String compressBetter (String str)
	{
		StringBuffer mystr = new StringBuffer();
		int count = 1;
		char last = str.charAt(0);
		for (int i = 1; i < str.length(); i++)
		{
			if (last == str.charAt(i))
			{
				count++;
			}
			else
			{
				mystr.append(last);
				mystr.append(count);
				last = str.charAt(i);
				count = 1;				
			}
		}
		mystr.append(last);
		mystr.append(count);
		
		int size = countCompression(mystr.toString());
		if (size > str.length())
		{ return str; }
		else
		{ return mystr.toString(); }
	}
	
	int countCompression(String urstr)
	{
		if (urstr.isEmpty() || urstr == null) return 0;		
		char last = urstr.charAt(0);
		int size = 0;
		int count = 1;
		for (int i = 1; i < urstr.length(); i++)
		{
			if (urstr.charAt(i) == last)
			{count ++;}
			else 
			{
				last = urstr.charAt(i);
				size += 1 + String.valueOf(count).length();
			}
		}
		return size;
	}
}


相关文章推荐

Java之美[从菜鸟到高手演变]之HashMap、HashTable

http://blog.csdn.net/zhangerqing/article/details/8193118 集合类之番外篇:深入解析HashMap、HashTable      ...

【Java】java中的this

(转)java中this的用法 java中的this随处可见,用法也多,现在整理有几点: 1. this是指当前对象自己。  当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上th...

利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。

利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个str...

【Java】编写一个方法,将字符串中的空格全部替换为“ ”

编写一个方法,将字符串中的空格全部替换为“%20”,假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的真实长度。 因为java里字符串是不可变的,所以如果用java,用字符数组而不是字符串 p...

【Java】编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置

编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置 只要求将变位词排在一起,没有要求这些词按照什么顺序排在一起。怎么检查两个词是不是变位词呢?统计每个字符串中各个字符出现的次数,如果两者...

编写一个通讯录,功能与以前的诺基亚手机一样,可以通过键盘进行箭头的移动,回车进入选项,用“W”键代表手机手机左键,“backspace”键代表返回上一级。能够实现基本的人性化的增删改查及文件的导入导出

该系统是在linux系统下编写的,所以在windows下无法运行。但是编程的

疯狂Java练习题 实现一个按字符来截取字符串的方法

在编写这个题时,学到的最主要的是利用String类里的split方法分割字符串,类似的方法还有//处理请求 String request = in.readLine(); String...

C#--第六周实验--任务2--继续在Class类里编写一个方法,名称为Reconvert,参数一个,但可以是字符串、整数、单精度、双精度,方法功能返回参数的逆序

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:返回...

ATM机 JAVA编写 基本功能都实现

  • 2013年04月03日 20:26
  • 38KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】编写一个方法,实现基本的字符串压缩功能
举报原因:
原因补充:

(最多只允许输入30个字)