游程减压

时间:2013-11-21 21:01:26

标签: java compression

CS学生在这里。我想编写一个程序来解压缩已经根据运行长度编码的修改形式编码的字符串(我已经编写了代码)。例如,如果一个字符串包含'bba10',它将解压缩为'bbaaaaaaaaa'。如何让程序识别字符串('10')的一部分是整数?

感谢阅读!

6 个答案:

答案 0 :(得分:4)

一个简单的正则表达式就可以了。

final Matcher m = Pattern.compile("(\\D)(\\d+)").matcher(input);
final StringBuffer b = new StringBuffer();
while (m.find()) 
  m.appendReplacement(b, replicate(m.group(1), Integer.parseInt(m.group(2))));
m.appendTail(b);

其中replicate

String replicate(String s, int count) {
  final StringBuilder b = new StringBuilder(count);
  for (int i = 0; i < count; i++) b.append(s);
  return b.toString();
}

答案 1 :(得分:0)

不确定这是否是一种有效的方法,但仅供参考

for (int i=0;i<your_string.length();i++)
    if (your_string.charAt(i)<='9' && your_string.charAt(i)>='0')
        integer_begin_location = i;

答案 2 :(得分:0)

我认为你可以用数字而不是数字符号来区分字符。

当你找到一个数字(&gt; 0和&lt; 9)时,你会看到下一个并选择放大你的数字(当前* 10 +新)或扩展你的字符串

答案 3 :(得分:0)

假设未压缩的数据永远不会包含数字:逐个字符地迭代字符串,直到得到一个数字。然后继续,直到你有一个非数字(或字符串结束)。中间的数字可以解析为整数,正如其他人已经说过的那样:

int count = Integer.parseInt(str.substring(start, end));

答案 4 :(得分:0)

这是python中的有效实现。这同样适用于2或3或多个数字

inputString="a1b3s22d4a2b22"
inputString=inputString+"\0"                 //just appending a null char
charcount=""
previouschar=""
outputString=""

for char in inputString:
  if char.isnumeric():
    charcount=charcount+char  
  else:
    outputString=outputString
    if previouschar:
      outputString=outputString+(previouschar*int(charcount))   
    charcount=""
    previouschar=char
    
print(outputString) // outputString= abbbssssssssssssssssssssssddddaabbbbbbbbbbbbbbbbbbbbbb

答案 5 :(得分:-1)

假设您没有询问解析,可以将类似“10”的字符串转换为这样的整数:

int i = Integer.parseInt("10");