用Java压缩和解压缩字符串的程序

用Java压缩和解压缩字符串的程序,java,debugging,loops,compression,Java,Debugging,Loops,Compression,我需要这段代码来压缩和解压用户给定的字符串,要压缩,用户将键入“javacompression-c”或“javacompression”。要解压缩,它将是“java压缩-d”。任何帮助都将不胜感激。它现在将编译并运行;但是,当您键入字符串时,它将只打印压缩而不是压缩字符串 import java.util.*; public class practice { public static void main(String args[]) { Scanner scan

我需要这段代码来压缩和解压用户给定的字符串,要压缩,用户将键入“javacompression-c”或“javacompression”。要解压缩,它将是“java压缩-d”。任何帮助都将不胜感激。它现在将编译并运行;但是,当您键入字符串时,它将只打印压缩而不是压缩字符串

import java.util.*;
public class practice
{
    public static void main(String args[])
    {
        Scanner scan = new Scanner(System.in);
        String originalString = scan.nextLine();
        String compressedString = "";
        int index = 0;
        int numReps = 0;
        char nextChar = ' ';
        if (args.length==0 || args[0].equals("-c"))
        {
            System.out.println("compress");
            String s = scan.next();
            compress(originalString);
            System.out.println(compressedString);
        }
        else if (args[0].equals("-d"))
        {
            System.out.println("decompress");
            decompress(compressedString);
        }
        else
        {
            System.out.println("Error! Unknown mode.");
        }

    }

    public static void compress(String originalString)
    {
        int index = 0;
        int numReps = 0;
        char nextChar = ' ';
        while (index < originalString.length())
        {
            numReps = 0;
            char c = originalString.charAt(index);
            if (!Character.isDigit(c))
            {
                nextChar = c;
                index++;
            }
            else
            {
                while (Character.isDigit(c))
                {
                    int temp = Integer.parseInt(""+c);
                    numReps = temp;
                    index++;
                    if (index >= originalString.length()) break;
                    c = originalString.charAt(index);
                }
                for (int i =0; i<numReps; i++)
                {
                    System.out.println(nextChar);
                }
            }
        }
    }

    public static void decompress(String compressedString)
    {
        int index = 0;
        int numReps = 0;
        char nextChar = ' ';

        while (index < compressedString.length())
        {
            numReps = 0;
            char c = compressedString.charAt(index);
            if (!Character.isDigit(c))
            {
                nextChar = c;
                index++;
            }
            else
            {
                while (Character.isDigit(c))
                {
                    int temp = Integer.parseInt(""+c);
                    numReps = (numReps*10) + temp;
                    index++;
                    if (index >= compressedString.length()) break;
                    c = compressedString.charAt(index);
                }
                for (int i =0; i<numReps; i++)
                {
                    System.out.println(nextChar);
                }
            }   
        }
    }
}
import java.util.*;
公共课堂实践
{
公共静态void main(字符串参数[])
{
扫描仪扫描=新扫描仪(System.in);
String originalString=scan.nextLine();
字符串压缩字符串=”;
int指数=0;
int numReps=0;
char nextChar='';
如果(args.length==0 | | args[0]。等于(“-c”))
{
System.out.println(“压缩”);
字符串s=scan.next();
压缩(原始字符串);
系统输出打印LN(压缩环);
}
else if(args[0]。等于(“-d”))
{
System.out.println(“解压缩”);
减压(压缩);
}
其他的
{
System.out.println(“错误!未知模式”);
}
}
公共静态无效压缩(字符串原始字符串)
{
int指数=0;
int numReps=0;
char nextChar='';
while(索引=originalString.length())中断;
c=原始字符串字符(索引);
}
对于(int i=0;i=compressedString.length())中断;
c=压缩弹簧特征(指数);
}

对于(int i=0;i您忘记了方法定义的类型参数:

public static void decompress(compressedString)
应该是

public static void decompress(String compressedString)
甚至更好

public static void decompress(final String compressedString)

您的代码中有两处出错(据我所知):-

  • publicstaticvoiddecompression(compressedString)
    实际上应该是
    publicstaticvoiddecompression(**String**compressedString)
    。您必须告诉
    方法
    它将要接收的
    参数
    String
    类型

  • compress
    decompress
    方法中,您有
    while(index
    。最后检查。您真的想要这样做吗?您永远不会执行
    while
    循环,因为您在循环开始之前就终止了它


  • 您是否遇到了错误。如果是,请告诉我们错误的原因以及您结束
    while
    循环代码的原因,如此处
    while(index
    @Prateek这就是我的导师告诉我的方法。(他也弄不明白。)额外的()after length not needed?取决于
    输入的内容。如果是数组,则必须使用
    .length
    ,因为长度是数组的一个属性;如果是
    字符串,则使用
    length()
    作为
    长度()
    String
    Class@Prateek我更改了代码中的一些内容,这看起来更好吗?两者之间的区别是什么?另外,你能看到程序还有什么问题吗?@gdhc21
    final
    声明方法参数不可变;这只是一个好的实践。