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

Java生成字符串"welcome"的循环三位子串问题求助

解决循环生成字符串子串的问题

首先,你的代码存在两个核心问题:

  • 循环仅执行了string.length()-2次(对应"welcome"就是5次),数组后两个元素未被赋值,所以输出null
  • 没有处理循环取子串的逻辑,也就是子串需要跨字符串末尾和开头的情况

要生成你预期的循环子串,需要做到两点:

  1. 循环次数等于字符串长度(每个起始位置都要生成一个子串)
  2. 对每个起始索引j,取3个字符;当索引超出字符串长度时,用模运算%回到开头

方案一:用StringBuilder拼接循环字符

String string = "welcome";
int subLength = 3;
String[] stringArray = new String[string.length()];

for (int j = 0; j < string.length(); j++) {
    StringBuilder sb = new StringBuilder();
    for (int k = 0; k < subLength; k++) {
        // 模运算实现循环索引,超出末尾自动回到开头
        int index = (j + k) % string.length();
        sb.append(string.charAt(index));
    }
    stringArray[j] = sb.toString();
}

// 输出结果
for (String d : stringArray) {
    System.out.println(d);
}

方案二:拼接原字符串后直接截取

这个方法更简洁,思路是把原字符串拼接成welcomewelcome,这样跨末尾的子串可以直接从拼接后的字符串中截取:

String string = "welcome";
int subLength = 3;
String[] stringArray = new String[string.length()];
String doubledStr = string + string;

for (int j = 0; j < string.length(); j++) {
    stringArray[j] = doubledStr.substring(j, j + subLength);
}

// 输出结果
for (String d : stringArray) {
    System.out.println(d);
}

运行任意一段代码,都能得到你预期的结果:wel、elc、lco、com、ome、mew、ewe

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:32:33