如何从字符串中获取索引

本文关键字:获取 索引 字符串 | 更新日期: 2023-09-27 18:35:51

我有一些字符串,我想从中获取索引号。

下面是示例。

        var x = "FundList[10].Amount";
        var y = "FundList[11].Amount";
        var z = "FundList[15].Amount";

我只想得到 10,11,15 并将它们放入 Int 数组中。

目前,我正在使用一种愚蠢的方式,即替换"FundList[","]"和".阿穆特"与"。

我想知道是否有更好的方法。

更新

以下是一些说明。这是我的代码。

这是我的部分观点的一部分。

    @{
    var txtIndexName = "FundList[" + Model.Index + "].Index";
    var txtAmountName = "FundList[" + Model.Index + "].Amount";
    var dropFiscalYearName = "FundList[" + Model.Index + "].FiscalYear";
}
Amount: <input type="text" name="@txtAmountName" id="@txtAmountName" /> 

这是调用 PartialView 的 JavaScript。每次用户单击锚链接时,都会调用 PartView。

function LoadContractOptionFundingPlanBlockByIndexNumber(indexNumber) {
$.ajax({
    type: "POST",
    url: "/Json/LoadContractOptionFundingPlanPartialView",
    data: JSON.stringify({ index: indexNumber }),
    contentType: "application/json; charset=utf-8"
}).success(function (result) {
    $("#ContractOptionFundingPlanBlock").append(result);
});
}
function GenerateOptionFundingPlanBlock() {
$("#lnkAddFundingBlock").click(function () {
    LoadContractOptionFundingPlanBlockByIndexNumber(currentIndexNumber);
    currentIndexNumber++;
});
}
$(document).ready(function () {
GenerateOptionFundingPlanBlock();
});
var currentIndexNumber = 10;

以下是我的观点:

<form action="#" method="post" name="formCreateContracOption" id="formCreateContracOption">
@Html.AntiForgeryToken()
@Html.LabelForRequired(x=>x.ThisContractOption.OptionName)
@Html.ValidationMessageFor(x=>x.ThisContractOption.OptionName)
@Html.TextBoxFor(x=>x.ThisContractOption.OptionName) <br/><br/>
Period of Performance
@Html.TextBoxFor(x=>x.ThisContractOption.OptionStartDate)
@Html.TextBoxFor(x=>x.ThisContractOption.OptionEndDate) <br /><br />
<a id="lnkAddFundingBlock" href="#">Add Funding Plan</a>  <br/><br/>
<div id="ContractOptionFundingPlanBlock"></div>
<input type="submit" id="btnCreateContractOption" name="btnCreateContractOption" value="Submit" />
</form>

毕竟,当用户单击"提交"按钮时,整个内容将发布到控制器。

这是我的控制器。

        [HttpPost]
    public ActionResult CreateContractOption(int contractId, ContractOptionCreateEditViewModel viewModel, FormCollection form)
    {
        var fundList = new List<OptionFundingPlanObject>();
        var allOptionAmountKeyList = form.AllKeys.Where(x => x.Contains("FundList") && x.Contains("Index")).ToList();
        var indexNumberList = new List<int>();
        foreach(var thisKey in allOptionAmountKeyList)
        {
            var convertedIndex = Convert.ToInt32(Regex.Match(thisKey, @"'d+").Value);
            indexNumberList.Add(convertedIndex);
        }
        return View();
    }

我问的原因是因为它不仅仅是如何将列表发布到控制器的问题。

当 List 以 ZERO 索引开头,并且每个其他索引都在一个序列中时,它很容易处理。

就我而言,用户可以通过调用我的分部视图来生成一个新选项。用户将能够删除生成的选项,并创建一个新选项。然后索引发生了变化。在这种情况下,我必须找到另一种解决问题的方法。

如何从字符串中获取索引

var x = "FundList[10].Amount";
int xIndex = Convert.ToInt32(Regex.Match(x,@"'d+").Value); //10

不过,这是一个奇怪的问题。你在做什么?:)

如果您总是要以您提供的形式拥有字符串,则可以将其拆分在括号中并从返回的字符串数组中获取项目:

var x = "FundList[10].Amount";
var num = x.Split('[', ']')[1];
int res = Convert.ToInt32(num);

因为它的固定FundList简单地

int i = int.Parse(x.Substring(9, x.IndexOf(']') - 9));

也许是这样的: 在线演示

using System;
using System.Text.RegularExpressions;
public class Program
{
    public static void Main()
    {
        string text = "FundList[15].Amount";
         var result = Convert.ToInt32(Regex.Replace(text, @"[^'d]+",""));
        Console.WriteLine("Result is = {0}", result);
    }
}

如果您更喜欢 LINQ 语法而不是正则表达式:

var x = "FundList[10].Amount";
int n = Int32.Parse(new string(x.Where(c => Char.IsDigit(c)).ToArray()));  //10