You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串展开程序输出不符合预期,如何修正代码?

问题:字符串展开结果字符重复过多,如何修正?

输入字符串:a2b3c1
预期输出:aabbbc
实际输出:aaabbbbcc
不清楚程序为何多打印字母字符,请问该修改哪部分代码以得到正确输出?

原程序代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class stringExpansionAndCompression {

    public void getStringInput() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the String value: ");
        String inputStr = reader.readLine();
        String output = stringExpansionRegEx(inputStr);
        System.out.println(output);
    }

    public String stringExpansionRegEx(String str) {

        StringBuilder result = new StringBuilder();

        Pattern pattern = Pattern.compile("([a-zA-Z]\\d)+");
        Matcher match = pattern.matcher(str);

        boolean bool = Pattern.matches("([a-zA-Z]\\d)+", str);
        if (bool = true){
            for (int i=0;i<str.length();i++)  {
                     char ch = str.charAt(i);
                     int count = Integer.parseInt(String.valueOf(str.charAt(i+1)));
                     for (int j = 0; j <= count; j++) {
                         result.append(ch);
                     }
                     i=i+1;
            }
        }
        return result.toString();
    }

}

问题原因及修改方案

  1. 字符重复过多的核心原因:内层循环的终止条件错误。原代码中j <= count会让循环执行count+1次(比如count=2时,j取0、1、2,共3次),导致字符多输出一次。需要将其改为j < count,这样循环正好执行count次,符合预期。
  2. 次要逻辑错误:if (bool = true)是赋值操作而非判断操作,会导致条件永远为真,应该修改为if (bool)或者if (bool == true)。

修改后的代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class stringExpansionAndCompression {

    public void getStringInput() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the String value: ");
        String inputStr = reader.readLine();
        String output = stringExpansionRegEx(inputStr);
        System.out.println(output);
    }

    public String stringExpansionRegEx(String str) {

        StringBuilder result = new StringBuilder();

        Pattern pattern = Pattern.compile("([a-zA-Z]\\d)+");
        Matcher match = pattern.matcher(str);

        boolean bool = Pattern.matches("([a-zA-Z]\\d)+", str);
        if (bool){ // 修正判断逻辑
            for (int i=0;i<str.length();i++)  {
                     char ch = str.charAt(i);
                     int count = Integer.parseInt(String.valueOf(str.charAt(i+1)));
                     for (int j = 0; j < count; j++) { // 修正循环终止条件
                         result.append(ch);
                     }
                     i=i+1;
            }
        }
        return result.toString();
    }

}

内容的提问来源于stack exchange,提问作者Urekha Rajendran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:05:16