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
相关产品推荐
相关产品推荐

