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

Java实现查找用户输入中连续重复最多数字串的技术问询

解决思路与完整代码实现

嘿,我来帮你搞定这个需求!首先得指出你现有代码里的一个小问题:用int接收输入的数字串是有风险的——如果用户输入的数字串太长(比如超过10位,超出Java int的取值范围),sc.nextInt()会直接抛出异常,而且我们要处理的是字符层面的连续重复,直接读字符串才是正确的打开方式。

下面咱们一步步完善代码:

第一步:修正输入读取与校验

先把输入改成读取字符串,同时确保输入全是数字:

Scanner sc = new Scanner(System.in);
System.out.println("input string:");
String input = sc.nextLine().trim();
// 校验输入是否为纯数字串
if (!input.matches("\\d+")) {
    System.out.println("input-output error");
    sc.close();
    return;
}

第二步:核心逻辑实现

我们需要遍历字符串,跟踪当前连续重复的字符、当前连续长度,同时记录最长的连续重复子串及其长度:

// 处理空输入的边界情况
if (input.isEmpty()) {
    System.out.println("");
    sc.close();
    return;
}

char currentChar = input.charAt(0);
int currentCount = 1;
String longestSubStr = String.valueOf(currentChar);
int longestCount = 1;

for (int i = 1; i < input.length(); i++) {
    char curr = input.charAt(i);
    if (curr == currentChar) {
        currentCount++;
        // 如果当前连续长度超过了之前记录的最长长度,更新结果
        if (currentCount > longestCount) {
            longestCount = currentCount;
            longestSubStr = input.substring(i - currentCount + 1, i + 1);
        }
    } else {
        // 遇到新字符,重置当前跟踪的变量
        currentChar = curr;
        currentCount = 1;
    }
}

// 输出最终结果
System.out.println(longestSubStr);
sc.close();

逻辑说明

  • 初始化:从字符串第一个字符开始,把它作为初始的当前字符和最长子串
  • 遍历过程:
    • 若当前字符和前一个相同,连续计数+1,一旦这个计数超过之前记录的最长长度,就更新最长子串
    • 若遇到不同字符,就重置当前跟踪的字符和计数
  • 边界处理:提前处理空输入的情况,避免索引越界

测试用例验证

  • 输入122113333443:遍历到3时连续计数达到4,超过之前的22和11的长度2,最终输出3333
  • 输入1224:连续最长的子串是22,输出符合预期

可选扩展

如果遇到多个长度相同的最长子串(比如输入112233),上面的代码会输出第一个出现的最长子串(11)。如果需要输出最后一个,只需把判断条件改成currentCount >= longestCount;如果要输出所有符合条件的子串,可以用一个List<String>来存储所有长度等于最长计数的子串,最后遍历输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:51:46