我有一个包含键值对的字符串,如"这个:1是:2 a:3最大:4和:5 i:6想要:7到:8传递:9 in:10 this:11测试:12和:13字符串:14继续:15"
现在我想从这个字符串中提取标签的值(比如测试)。我无法提取12的标记测试值,因为我编写的匹配逻辑与选项卡Bigtest匹配,输出为4。
我是C#的新手,所以需要一些专家帮助。
我的逻辑:message是包含键值的字符串,属性是tag(test)的名称
public static string GetAttributeValueByName(string message, string attributeName)
{
int startIndex = message.IndexOf(attributeName + ":");
string attribute = message.Substring(startIndex + (attributeName + "=").Length);
int position = attribute.IndexOf(' ', 1);
if (position != -1)
{
string attributeValue = attribute.Substring(1, position - 1);
return attributeValue;
}
return "";
}
提前致谢。
答案 0 :(得分:3)
如果您首先在空格处拆分字符串:
var pairs = input.Split(" ");
你最终会得到一个像这样的数组:
this:1
is:2
a:3
Bigtest:4
and:5
i:6
want:7
to:8
pass:9
in:10
this:11
test:12
and:13
string:14
continues:15
然后,您可以遍历冒号上的数组拆分的每个元素,并检查该对的第一个元素是否与您的测试词匹配。
字符串输出; foreach(成对的var对) { var result = pair.Split(“:”); if(result [0] == testWord) { output = result [1]; 打破; } }
显然,您需要进行错误捕获和输入验证。
答案 1 :(得分:1)
假设字符串将始终采用“findstring:findvalue”格式,您可以执行以下操作:
private string GetValueFromString(string SearchString, string FindString)
{
foreach (string Items in SearchString.split(' '))
{
string SubItems = Items.split(':');
if (SubItems[0] == FindString)
{
return SubItems[1];
}
}
return null;
}
string SearchString = "this:1 is:2 a:3 Bigtest:4 and:5 i:6 want:7 to:8 pass:9 in:10 this:11 test:12 and:13 string:14 continues:15";
Console.WriteLine(GetValueFromString(SearchString, "test"));
以上还假设您要搜索的文本不会重复。我的例程将值作为字符串返回。如果要转换为其他类型(如整数),则需要在返回值周围调用Convert.ToInt32()
并更改函数的数据类型。
答案 2 :(得分:0)
有很多方法可以解决这个问题:
\b
元字符; String.Split
函数将字符串拆分为字符串数组,然后查看每个数组元素中的第一个单词; 答案 3 :(得分:0)
试试这个:
string message = "this:1 is:2 a:3 Bigtest:4 and:5 i:6 want:7 to:8 pass:9 in:10 this:11 test:12 and:13 string:14 continues:15";
string searchWord = "this";
int foundWords = 0;
string[] arg = message.Split(new char[] { ' ' });
int count = message.Split(' ').Length;
for (int i = 0; i < count; i++)
{
if (arg[i].Contains(searchWord))
{
int index = arg[i].IndexOf(":") + 1;
Console.WriteLine(arg[i].Substring(index, arg[i].Length - index));
foundWords++;
}
}
Console.WriteLine("found words: {0}", foundWords);
//message that you want to search in..
string message = "this:1 is:2 a:3 Bigtest:4 and:5 i:6 want:7 to:8 pass:9 in:10 this:11 test:12 and:13 string:14 continues:15";
//read the word .
Console.Write("Enter your word: ");
string searchWord = Console.ReadLine();
// Init integer variable to count how many (world) in (message)
int foundWords = 0;
//split message string at spaces
string[] arg = message.Split(new char[] { ' ' });
// get the length of the message items
int count = message.Split(' ').Length;
//loop through message items
for (int i = 0; i < count; i++)
{
//check if first array item contains the desired word
if (arg[i].Contains(searchWord))
{
//get the index of (:) mark
int index = arg[i].IndexOf(":") + 1;
//substring the string after the (:) word
Console.WriteLine(arg[i].Substring(index, arg[i].Length - index));
//increase the counter
foundWords++;
}
}
Console.WriteLine("found words: {0}", foundWords);