压缩文件

时间:2016-01-25 21:09:04

标签: java arrays string char stringbuilder

我想完成一个可以获取文本文件并缩小尺寸的程序。到目前为止,它取代了所有双字符出现,现在我想用“1”替换“ou”。

我尝试过使用if语句,但似乎效果不佳。

我的方法如下:

public String compressIt (String input)
    {
        int length = input.length(); // length of input
        int ix = 0;                  // actual index in input
        char c;                      // actual read character
        int cCounter;                // occurrence counter of actual character
        String ou = "ou";
        StringBuilder output =       // the output
                new StringBuilder(length);

        // loop over every character in input
        while(ix < length)
        {
            // read character at actual index then increments the index
            c = input.charAt(ix++);
            // we count one occurrence of this character here
            cCounter = 1;

            // while not reached end of line and next character
            // is the same as previously read
            while(ix < length && input.charAt(ix) == c)
            {
                // inc index means skip this character
                ix++;
                // and inc character occurence counter
                cCounter++;
            }


            if (input.charAt(ix) == 'o' && input.charAt(++ix) == 'u' && ix < length - 1)
            {
                output.append("1");
            }

            // if more than one character occurence is counted
            if(cCounter > 1)
            {
                // print the character count
                output.append(cCounter);
            }

            // print the actual character
            output.append(c);
        }
        // return the full compressed output
        return output.toString();
    }

这是我所指的这些代码行。

if (input.charAt(ix) == 'o' && input.charAt(ix + 1) == 'u')
            {
                output.append("1");
            }

我想做什么:替换字符。我有一个包含“爱丽丝梦游仙境”的文本文件。当我循环遍历所有字符时,会看到“o”和“u”(如“你”),我想要替换字符,使其看起来像:“Y1”。

此致

2 个答案:

答案 0 :(得分:1)

所以你最有可能尝试从ix = 0循环到字符串的长度。

首先我的猜测是你循环并包括string.length()。哪个不起作用,charAt是0索引aka &#34; ABC&#34;有一个charAt 0,1和2但不是3,它给出了你描述的错误。

您展示的所有行中的第二行使用input.charAt (ix++)执行以下操作:获取位置ix(旧值)的char,然后将值ix更新为ix + 1,如果您希望ix为在周围的字母之前更新,你必须写input.charAt(++ix)

第三,有一个String.replace函数,input.replace(&#34; abc&#34;,&#34; def&#34;)对于简单的替换很有用,对于更复杂的替换,考虑使用正则表达式。

答案 1 :(得分:0)

这与charAt方法无关。您需要更改if条件才能运行它直到length-1。它在最后一种情况下失败了,因为它正在出阵。

for(int i=0; i<inputString.length() - 1; i++)
        {
            char temp = inputString.charAt(i);
            char blah = inputString.charAt(i+1);
            System.out.println("temp: "+ temp);
            System.out.println("blah: "+ blah);
        }

这对我有用!