【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长字符串变短串工具类

package net.zkbc.p2p.util; import java.util.UUID; import com.zkbc.core.util.MD5; /** * ① 将长字符串用m...
  • yx511500623
  • yx511500623
  • 2015年04月11日 13:23
  • 3166

Java 压缩字符串

1.引言 最近在做项目中,平台提供一个http服务给其他系统调用,然后我接收到其他系统的json格式的报文后去解析,然后用拿到的数据去调用corba服务,我再把corba的返回值封装完成json字符...
  • kalision
  • kalision
  • 2012年08月14日 13:24
  • 13735

面试5之编写一个方法,实现基本的字符串压缩功能。

题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给...
  • hj605635529
  • hj605635529
  • 2017年04月16日 23:06
  • 223

字符串压缩的一些算法

应用中,经常需要将字符串压缩成一个整数,即字符串散列。比如下面这些问题:(摘自JULY的博客  http://blog.csdn.net/v_july_v/ )(1)搜索引擎会通过日志文件把用户每次检...
  • wuzhekai1985
  • wuzhekai1985
  • 2011年07月22日 20:18
  • 35661

Java工具类——字符串压缩StringCompress

1.compress(String):对字符串进行ZIP压缩饼返回字节数组 2.decompress(byte[]):将压缩的字节数组还原成字符串 用途:可用于将字符串保存到数据库...
  • xyw591238
  • xyw591238
  • 2016年06月20日 13:11
  • 3117

[Java 常用类库]:StringCompress(字符串压缩)

[Java 常用类库] StringCompress(字符串压缩) 方法说明: 1.compress(String):对字符串进行ZIP压缩饼返回字节数组 2.decompress...
  • isea533
  • isea533
  • 2012年11月19日 15:51
  • 10475

JAVA 实现文件(字符串)压缩与解压

1.引言 最近在做项目中,平台提供一个http服务给其他系统调用,然后我接收到其他系统的json格式的报文后去解析,然后用拿到的数据去调用corba服务,我再把corba的返回值封装完成json...
  • u012422446
  • u012422446
  • 2016年09月07日 23:26
  • 3473

Java Gzip类 - base64压缩和解压

Java Gzip类 - base64压缩和解压
  • csharp25
  • csharp25
  • 2016年11月17日 22:28
  • 2941

C语言实现压缩二例

一 简单字符串压缩 编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串”abcbc”由于无连续重复字符,压...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年08月29日 22:58
  • 2194

将字符串中连续出现的重复字母进行压缩

/* 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符...
  • dutsoft
  • dutsoft
  • 2014年05月19日 20:08
  • 1534
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】编写一个方法,实现基本的字符串压缩功能
举报原因:
原因补充:

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