C#中的子串

时间:2016-05-20 21:50:09

标签: c# asp.net

我有字符串" 10-1283-01"长度变得相同,我想检查的是那个字符串,如" 10-xxxx-0x" 只希望前3个字符像" 10 - "最后但只有一个两个字符,如" -0"。

所以我正在潜水/子串下面的东西。对于first3,它给了我必需的字符串但是对于lastPart,它给了我ArgumentOutOfRangeException。

请告诉我如何获得-0字符串?在此先感谢

  string partnoveri = lpartno.Text;
    string first3=partnoveri.Substring(0, 3);
    string lastPart = partnoveri.Substring(partnoveri.IndexOf("-0"),partnoveri.Length-1);

4 个答案:

答案 0 :(得分:1)

C#Substring方法不是

String.Substring( int startIndex, int endIndex )

正如您的代码所示,而不是

String.Substring( int startIndex [, int numberofCharacters ] )

鉴于此,如果你正在寻找两个角色,你可以使用:

string lastPart = partnoveri.Substring(partnoveri.IndexOf("-0"), 2);

话虽这么说,我选择了@KMC的正则表达式解决方案。虽然Substring将适用于您的示例,但如果第四个字符为零,它将失败,如10-0283-01

答案 1 :(得分:1)

为什么不使用正则表达式?

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
using System.Collections.Generic;
using Newtonsoft;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json.Linq;

using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var pattern = "[0-9]{2}-[0-9]{4}-[0-9]{2}";
            var input = "10-1283-01";

            var matches = Regex.Matches(input, pattern);
            if(Regex.IsMatch(input, pattern))
            {
                Console.WriteLine("MATCH");
            }



        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }




}

答案 2 :(得分:0)

要接收最后两个字符,您可以使用下面的子字符串:

partnoveri.Substring(partnoveri.Length-2,2);

对于这种情况,您也可以使用正则表达式。

答案 3 :(得分:0)

刚刚阅读了 C# 8.0 规范中的 Ranges 介绍。

阅读这个问题:

<块引用>

我有字符串“10-1283-01”,长度相同,我想 检查是否像“10-xxxx-0x”这样的字符串只需要前 3 个字符 像“10-”和最后一个两个字符像“-0”。

一个可以做(因为 c# 8.0 规范):

string partno = "10-1283-01";
Console.WriteLine($"{partno[0..3]}");    // returns "10-"
Console.WriteLine($"{partno[^3..^1]}");  // returns "-0"