簡體   English   中英

string.indexof無法正常工作

[英]string.indexof not working as expected

我的string.IndexOf方法有問題。
我有一個包含多個要提取的子字符串的字符串。
例:

key=muchdata&key=muchdata&key=muchdata

那就是輸入字符串的簡化結構。
muchdata可以包含每個A-Za-z0-9和特殊字符,如!“§$%&/()=?

我想獲取所有key=字符串之間的數據。

首先,我想使用正則表達式,但無法創建一個有效的正則表達式。 然后我考慮使用string.IndexOf
所以我做了這樣的事情:

int start = input.IndexOf("key=");
int end = input.IndexOf("&key=");
string sub = input.Substring(start, end);

不幸的是,這沒有按預期進行。 有時,它甚至返回一個子串,但長度約為30個字符。
我構建了更多代碼來檢查end == -1是否到達了結尾,這樣我才得到了從整個字符串的start到結尾的最后一個子字符串。

我真的不知道下一步該怎么做:(
我想念/做錯了什么?

與其使用字符串操作,不如使用為此設計的類

var coll = HttpUtility.ParseQueryString("key=muchdata&key=muchdata&key2=muchdata");
var key = coll["key"];

您可以使用string.Split來獲取[&]key=

var myValues
    = "key=muchdata&key=muchdata&key=muchdata".Split(new[] { "key=", "&key=" },
         StringSplitOptions.None);

字符串的輸出將是一個字符串數組:

muchdata
muchdata
muchdata

至於您目前正在做什么,我認為我們需要查看更多代碼以找出問題所在。 您可能會在某種循環中使用這三行代碼來嘗試獲取每個“子字符串”。

我的猜測是,在第二種解決方法中,您將分別在startend獲得1225 (對於您使用的示例字符串)。 string.Substring方法采用起始索引和長度,而不是起始和結束。 如果僅將1225插入該方法,則會得到意外的結果:

&key=muchdata&key=muchdat

你應該做字符串sub = input.Substring(start + 4,end); 因為開始是Key =開始的索引。 因此,要獲取子字符串,您應該根據Key =中的字符數進行調整

可能是IndexOf()返回搜索到的表達式的第一個字符的位置。 因此,您需要添加表達式的長度。 同樣, Substring將長度作為第二個參數,而不是結束索引。

var startEx = "key=";
int start = input.IndexOf(startEx) + startEx.Length;
int end = input.IndexOf("&key=");
string sub = input.Substring(start , end - start);

您可以按key= Split文本,然后使用LINQ:刪除所有無效字符LINQ:

var str = "key=muchdata&key=muchdata&key=muchdata";
var result = str.Split(new string[] { "key=" }, StringSplitOptions.RemoveEmptyEntries)
             .Select(word => new String(word.Where(char.IsLetterOrDigit).ToArray()))
             .ToList();

結果應為List<string>

你應該試試這個

string input="key=muchdata1&key=muchdata2&keys=muchdata3";
var data=input.Split(new[] { "&" }, StringSplitOptions.None);
List<String> keyValues = new List<String>();
foreach(string d in data)
{
    if(d.StartsWith("key="))
    {
        keyValues.Add(d.Substring(4));
    }
}
//Access Values Here
foreach (string d in keyValues)
{
    Console.WriteLine(d);
}
Console.ReadKey();;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM