Java生成字符串"welcome"的循环三位子串问题求助
解决循环生成字符串子串的问题
首先,你的代码存在两个核心问题:
- 循环仅执行了
string.length()-2次(对应"welcome"就是5次),数组后两个元素未被赋值,所以输出null - 没有处理循环取子串的逻辑,也就是子串需要跨字符串末尾和开头的情况
要生成你预期的循环子串,需要做到两点:
- 循环次数等于字符串长度(每个起始位置都要生成一个子串)
- 对每个起始索引
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
相关产品推荐
相关产品推荐

