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

Java:遍历奇偶长度字符串,每次取两个连续字符的更优实现?

优化逐行读取字符串并成对获取字符的方法

你当前的实现已经能适配奇偶长度字符串的需求,但可以从代码简洁性和性能两个维度做优化,以下是几种更优的实现方式:

1. 简化条件判断,让代码更紧凑

把原来的if判断替换为三元表达式,减少代码行数的同时保持可读性:

public void readTwoChars(BufferedReader b) throws IOException {
    String line;
    while ((line = b.readLine()) != null) {
        int lineLen = line.length();
        for (int i = 0; i < lineLen; i += 2) {
            char firstChar = line.charAt(i);
            // 用三元表达式直接判断是否存在下一个字符
            char secondChar = (i + 1 < lineLen) ? line.charAt(i + 1) : 0;
            // 这里添加你的业务逻辑,比如使用firstChar和secondChar
        }
    }
}

2. 转字符数组遍历,提升性能

String.charAt()每次调用都会做索引越界检查,把字符串转成char[]后直接访问数组元素,能减少重复的检查开销,适合处理大文本场景:

public void readTwoChars(BufferedReader b) throws IOException {
    String line;
    while ((line = b.readLine()) != null) {
        char[] charArray = line.toCharArray();
        int arrLen = charArray.length;
        for (int i = 0; i < arrLen; i += 2) {
            char firstChar = charArray[i];
            char secondChar = (i + 1 < arrLen) ? charArray[i + 1] : 0;
            // 业务逻辑处理
        }
    }
}

3. 拆分循环逻辑,避免重复判断

如果处理的字符串很长,每次循环都做条件判断会有微小的性能损耗,可以把成对字符和最后一个单独字符分开处理,逻辑更清晰:

public void readTwoChars(BufferedReader b) throws IOException {
    String line;
    while ((line = b.readLine()) != null) {
        int lineLen = line.length();
        int i = 0;
        // 先处理所有成对的字符
        for (; i <= lineLen - 2; i += 2) {
            char firstChar = line.charAt(i);
            char secondChar = line.charAt(i + 1);
            // 处理成对字符的逻辑
        }
        // 处理最后一个单独的字符(仅当长度为奇数时执行)
        if (i < lineLen) {
            char firstChar = line.charAt(i);
            char secondChar = 0;
            // 处理单独字符的逻辑
        }
    }
}

以上几种方式都能完美适配奇偶长度的字符串,你可以根据业务场景选择:追求代码简洁选第一种,处理大文本选第二种,看重性能或逻辑清晰选第三种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:58:16