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

求助解析Java实现字符串子串替换的代码运行逻辑

字符串子串替换Java代码解析

需求说明

给定三个字符串S、S1、S2(分别包含N、M、K个字符),需要将S中所有匹配S1的子串替换为S2。例如输入S="abababa",S1="aba",S2="a",输出结果为"aba"。

实现代码

import java.util.Scanner;

public class stringint {
    public static void substring(String s, String s1,String s2) {
        String ans = "";
        for (int i = 0; i < s.length(); i++) {
            int k = 0;
            if (s.charAt(i) == s1.charAt(k) && i+s1.length() <= s.length()) {
                int j;
                for (j = i; j < i+s1.length(); j++) {
                    if (s.charAt(j) != s1.charAt(k)) {
                        break;
                    }
                    else {
                        k = k + 1;
                    }
                }
                if (j == i + s1.length()) {
                    ans += (s2);
                    i = j - 1;
                }
                else {
                    ans += (s.charAt(i));
                }
            }
            else {
                ans += (s.charAt(i));
            }
        }
        System.out.println(ans);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the string s:");
        String s = sc.next();
        System.out.println("Enter the string s1:");
        String s1 = sc.next();
        System.out.println("Enter the string s2:");
        String s2 = sc.next();
        substring(s, s1, s2);
    }
}

代码运行机制解析

核心逻辑:逐字符遍历+局部匹配验证

  1. 初始化结果容器:String ans = ""用来存储最终替换后的字符串。
  2. 外层遍历主字符串S:用i作为S的索引,逐个遍历每个字符。
  3. 触发匹配检查的条件:
    每次遍历先初始化k=0(k是S1的索引),如果当前S的字符s.charAt(i)等于S1的第一个字符s1.charAt(k),并且当前位置i加上S1的长度不会超出S的范围(避免数组越界),就开始验证是否完整匹配S1。
  4. 内层循环验证完整匹配:
    用j从i开始遍历,逐个对比s.charAt(j)和s1.charAt(k):
    • 一旦发现字符不相等,立刻跳出循环,说明匹配失败。
    • 字符相等的话,k自增,继续对比下一个字符。
  5. 匹配结果处理:
    • 如果内层循环结束时j == i + s1.length(),说明从i开始的子串完全匹配S1:把S2追加到ans里,同时把i设为j-1(因为外层循环i会自动自增,这样就能跳过已经匹配的S1字符,避免重复处理)。
    • 如果匹配失败,直接把当前S的字符s.charAt(i)追加到ans里。
  6. 不触发匹配的情况:如果当前字符和S1第一个字符不相等,或者剩余长度不够容纳S1,直接把当前字符追加到ans。

示例走一遍(S="abababa",S1="aba",S2="a")

  • i=0:s[0]是a,和s1[0]匹配,且0+3<=7。内层循环j从0到2,逐个匹配a、b、a,全部吻合。j最终等于3,所以ans加"a",i设为2。外层循环i自增到3。
  • i=3:s[3]是b,和s1[0]不匹配,直接把b加到ans,ans变为"ab"。i自增到4。
  • i=4:s[4]是a,和s1[0]匹配,4+3=7<=7。内层循环j从4到6,匹配a、b、a,全部吻合。j等于7,ans加"a",i设为6。外层循环i自增到7,超出s.length()=7,循环结束。
  • 最终ans是"aba",和示例输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:55:13