[英]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
至於您目前正在做什么,我認為我們需要查看更多代碼以找出問題所在。 您可能會在某種循環中使用這三行代碼來嘗試獲取每個“子字符串”。
我的猜測是,在第二種解決方法中,您將分別在start
和end
獲得12
和25
(對於您使用的示例字符串)。 string.Substring
方法采用起始索引和長度,而不是起始和結束。 如果僅將12
和25
插入該方法,則會得到意外的結果:
&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.