不确定如何实现for循环

时间:2015-02-16 23:25:29

标签: java for-loop

您好我无法实现此功能

功能: 解压缩字符串。字符串中的字符前面有一个数字。这个数字告诉你重复这封信的次数。返回一个新字符串。 “3d1v0m”变为“dddv”

到目前为止,我发现我的代码不正确。我不确定如何解决它。

到目前为止我的代码是: int start = 0;

    for(int j = 0; j < s.length(); j++){
         if (s.isDigit(charAt(s.indexOf(j)) == true){
             Integer.parseInt(s.substring(0, s.index(j))

3 个答案:

答案 0 :(得分:2)

假设输入的格式正确,以下可以是使用for循环的简单代码。当然,这不是一个时髦的代码,您可以使用Commons LangGuava编写更简洁和功能性的代码。

StringBuilder builder = new StringBuilder();
for (int i = 0; i < s.length(); i += 2) {
   final int n = Character.getNumericValue(s.charAt(i));
   for (int j = 0; j < n; j++) {
      builder.append(s.charAt(i + 1));
   }
}

System.out.println(builder.toString());

答案 1 :(得分:2)

以下是您可能希望使用的使用Regex的解决方案:

    String query = "3d1v0m";
    StringBuilder result = new StringBuilder();

    String[] digitsA = query.split("\\D+");
    String[] letterA = query.split("[0-9]+");

    for (int arrIndex = 0; arrIndex < digitsA.length; arrIndex++)
    {

        for (int count = 0; count < Integer.parseInt(digitsA[arrIndex]); count++)
        {
            result.append(letterA[arrIndex + 1]);
        }
    }

    System.out.println(result);

<强>输出

dddv

此解决方案可扩展,支持超过1位数字和超过1个字母的模式。

<强>输入

3vs1a10m

<强>输出

vsvsvsammmmmmmmmm

答案 2 :(得分:0)

虽然Nami的答案简洁而且很好。我仍在添加我的变种解决方案,作为静态方法构建,不使用嵌套的For循环,而是使用While循环。并且,它要求输入字符串具有偶数个字符,并且压缩字符串中的每个奇数位置字符都是数字。

public static String decompress_string(String compressed_string)
{
    String decompressed_string = "";

    for(int i=0; i<compressed_string.length(); i = i+2) //Skip by 2 characters in the compressed string
    {
        if(compressed_string.substring(i, i+1).matches("\\d")) //Check for a number at odd positions
        {
            int reps = Integer.parseInt(compressed_string.substring(i, i+1));   //Take the first number
            String character = compressed_string.substring(i+1, i+2);   //Take the next character in sequence

            int count = 1;
            while(count<=reps)//check if at least one repetition is required
            {
                decompressed_string = decompressed_string + character; //append the character to end of string
                count++;
            };
        }
        else
        {
            //In case the first character of the code pair is not a number
            //Or when the string has uneven number of characters
            return("Incorrect compressed string!!"); 
        }
    }

    return decompressed_string; 
}