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

Java循环未读取字符串最后字符问题求助

问题分析与解决

核心问题1:循环条件错误导致丢失最后一个字符

原代码的循环条件是:

for(i = 0; i < text.length() -1; i++)

字符串索引从0开始,长度为n的字符串,最后一个字符的索引是n-1。这个条件会让循环在i = n-2时就停止,永远不会处理最后一个字符,所以输入单个字符时循环根本不会执行,返回空字符串。

正确的循环条件应该是:

for(i = 0; i < text.length(); i++)

这样就能遍历从索引0到text.length()-1的所有字符。

核心问题2:语法错误引发的误导

你说修改循环条件后出现索引越界,实际是因为代码里的else if分支有语法错误:

code = code + text.charAt(i) + rule);

这里多了一个多余的右括号),导致编译失败。修正后还要补上强制类型转换(否则text.charAt(i)+rule会被当作整数拼接,比如'a'+1会变成98而非字符'b'),正确写法是:

code = code + (char)(text.charAt(i) + rule);

优化实现:修正语法+提升效率

频繁用String +=拼接字符串会产生大量中间对象,效率低下,建议改用StringBuilder,同时调整类结构(原代码main方法写在类外不符合Java语法):

public class BasicEncrypt {
    public static String encrypt(String text, int rule) {
        StringBuilder code = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            char original = text.charAt(i);
            int newVal = original + rule;
            if (newVal > 255) {
                code.append((char) (newVal - 255));
            } else {
                code.append((char) newVal);
            }
        }
        return code.toString();
    }

    public static void main(String[] args) {
        System.out.println(BasicEncrypt.encrypt("abcdef", 1)); // 输出bcdefg
        System.out.println(BasicEncrypt.encrypt("a", 1)); // 输出b
    }
}

补充说明

如果rule数值较大(比如超过255),可以用newVal % 256替代减法,简化循环逻辑,效果是一致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:27