2

我有以下字符串:

string nextEvent = "[[\"nextData\", \"RANDOM MESSAGE\"], [\"moreInfo\", {\"num\": 3204}]]"

我需要将“随机消息”(不带引号)放入单独的字符串中。现在,如果 RANDOM MESSAGE 是一个常数,那将很容易,但事实并非如此。假设它是通过用户输入生成的,并且每次的值和长度都不同。

我将如何从那里提取该消息?我尝试过将 Substring 与 IndexOf 一起使用,但每次都得到错误的结果,这很令人困惑。

4

6 回答 6

0

如果之前/之后的字符串是恒定的,您可以通过执行以下操作获得随机消息部分:

int startIndex = ("[[\"nextData\", \"").Length; 
int endIndex = nextEvent.IndexOf(", [\"moreInfo\""); 
string randomMessage = nextEvent.Substring(startIndex, endIndex - startIndex );

您还可以使用Split从目标区域开始获取字符串:

string[] temp = nextEvent.Split(new string[] { "[[\"nextData\", \"" }, StringSplitOptions.None);
//temp[1] = "RANDOM MESSAGE..."
于 2013-07-25T11:37:44.920 回答
0

您可以像这样使用简单的拆分:

  string nextEvent = "[[\"nextData\", \"RANDOM MESSAGE\"], [\"moreInfo\", {\"num\": 3204}]]";
  var strs = nextEvent.Split(']');
  var ds = strs[0].Split(',');
  var m = ds[1].TrimStart('"', ' ');
  m = m.TrimEnd('"');
于 2013-07-25T11:27:51.177 回答
0

使用JSON.NET

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

class Test
{
    static void Main()
    {            
       string nextEvent = "[[\"nextData\", \"RANDOM MESSAGE\"], [\"moreInfo\", {\"num\": 3204}]]";
       JObject json = JObject.Parse("{\"j\":" + nextEvent + "}");
       string randomMessage = (string)json["j"][0][1]; 
       Console.WriteLine(randomMessage); // gives "RANDOM MESSAGE"
    }
}
于 2013-07-25T11:47:04.550 回答
0

第三种可能的解决方案,虽然不是很执行是这样的:

带上你的字符串并将其解析为字典:

String nextEvent="[[\"nextData\",\"RANDOM MESSAGE\"],[\"moreInfo\",{\"num:\": 3204}]]";
Dictionary<string, object> dict =  JSON.Parse<Dictionary<string,object>>(nextEvent);
String randomMessage = dict("nextData");

当您有一个非常长的这种格式的字符串并且必须从中提取多个“字段”时,这变得相关

于 2013-07-25T11:33:13.450 回答
0

您可以使用正则表达式来获取它:

string input = "[[\\\"nextData\\\", \\\"RANDOM MESSAGE\\\"], [\\\"moreInfo\\\", {\\\"num\\\": 3204}]]";
string pattern = "^\\[\\[\\\\\"nextData\\\\\",\\s*\\\\\"(?<message>[\\S ]+)\\\\\"\\],\\s*\\[\\\\\"moreInfo\\\\\",\\s*\\{\\\\\"num\\\\\":\\s*\\d+\\}\\]\\]$";
Regex r1 = new Regex(pattern);

Match match = r1.Match(input);
if (match.Success)
    Console.WriteLine(match.Groups["message"].Value);
于 2013-07-25T11:25:34.727 回答
0

如果您想要“蛮力”方法:

String nextEvent = "[[\"nextData\", \"RANDOM MESSAGE\"], [\"moreInfo\", {\"num\": 3204}]]";
String tmp = nextEvent.Trim(new Char[] { '[', ']' });
String[] sa = tmp.Split(',');
String rndMsg = sa[1].Trim().Trim(new Char[] { '[', ']', '\"' });
于 2013-07-25T11:27:00.757 回答