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

C#中使用Substring()与Remove()方法未得到预期结果的问题咨询

问题原因

你对C#中Substring()方法的参数规则理解有误,直接导致第一行判断逻辑走了不符合预期的分支:

  • C#的string.Substring(startIndex, length)方法,第二个参数代表要截取的子串长度,不是截取的结束索引
  • 你第一行的判断条件line.Substring(0,1).Equals("PH"),实际效果是从索引0开始截取1个字符,返回值是"P",和"PH"完全不相等,三元表达式直接返回原始字符串"PHP",自然和预期结果不符
  • 第二行代码能输出正确结果属于参数巧合:line.Substring(1,2)从索引1开始截取2个字符,刚好返回"HP"匹配判断条件,触发line.Remove(1,2)逻辑——从索引1开始删除2个字符,仅保留索引0位置的"P",刚好和你预期结果一致。
修正方案

如果要让第一行逻辑同样输出"P",需要把Substring的截取长度改为2,匹配前两个字符"PH"后,删除前2位即可,修正后完整可运行代码如下:

using System;
using static System.Console;
using System.Collections.Generic;
using System.Globalization;

namespace prac10
{
    class prac
    {
        public static void Main()
        {
            string line = "PHP";
            // 修正截取长度为2,匹配前两位"PH"后删除前2位
            WriteLine((line.Substring(0,2).Equals("PH") ? line.Remove(0,2) : line));
            WriteLine((line.Substring(1, 2).Equals("HP") ? line.Remove(1, 2) : line));
        }
    }
}

运行后两行输出均为"P",符合预期。

注意:C#中字符串索引从0开始计数,使用Substring、Remove这类带位置参数的方法时,一定要区分「索引位置」和「长度」两个参数的含义,避免传值错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:09:23