我有一个包含数据的字符串如下。如何将其分配给字符串[,]?
传递时的字符串具有如下值:
string test = "{ \"BusinessOrg\", \"BusinessOrgID\", \"BusinessOrg\", \"BusinessOrgID\"}, { \"BusinessParameters\", \"BusinessOrgID\", \"BusinessOrg\", \"BusinessOrgID\"}"
在文本可视化工具中查看时的内容如下:
{“BusinessOrg”,“BusinessOrgID”, “BusinessOrg”,“BusinessOrgID”},{ “BusinessParameters”,“BusinessOrgID”, “BusinessOrg”,“BusinessOrgID”} “BusinessOrg”,“BusinessOrgID”, “BusinessOrg”,“BusinessOrgID”},{ “BusinessParameters”,“BusinessOrgID”, “BusinessOrg”,“BusinessOrgID”}
我无法将字符串分配给字符串[,]
string [,] strArray = test;
这是抛出错误无法将字符串转换为字符串[,]
答案 0 :(得分:1)
您需要构建自己的解析器来处理您拥有的这种数据格式。假设此字符串的格式始终为{ "A1", "A2", ... }, { "B1", "B2", ... } ...
和,则没有转义字符(也就是说,您不希望}
或"
在你的子串中)然后代码实际上相当简单。
作为起点,您可以使用此算法说明。它没有经过优化,在解析方式上有点松懈(例如允许0个或多个逗号/空格字符) - 它只是一个起点。
{
。
string[]
。"
或}
。
"
,请将字符读入缓冲区,直到再次看到"
为止;将此缓冲区存储为当前数组中的字符串,必要时调整大小。从步骤(B)再次循环。}
,并且您尚未分配多维数组,请立即使用此数组的长度作为第二维;否则,只需将其存储在数组中,必要时调整大小。从步骤(A)再次循环。如果在某个时刻,你到达输入的末尾,你应该退出循环并返回你的数组。
答案 1 :(得分:0)
如果您在代码中提供该字符串,则需要将其重新格式化为二维字符串(例如,新字符串[,] {{“a”,“b”},{“c”,“d “}})。如果您从其他来源获取该字符串,则需要先解析它。你拿一个字符串并告诉它将它转换为二维字符串数组,这是不可能的,因为你只提供一个字符串。
答案 2 :(得分:0)
这可能有助于第一步(假设字符串格式一致):
String Input = "{ \"BusinessOrg\", \"BusinessOrgID\", \"BusinessOrg\", \"BusinessOrgID\"}, { \"BusinessParameters\", \"BusinessOrgID\", \"BusinessOrg\", \"BusinessOrgID\"}";
String[] Segments = Input.Split(new string[] {"{", "}, {", "}"}, StringSplitOptions.RemoveEmptyEntries);
然后,您可以用逗号空格分割每个段。
答案 3 :(得分:0)
我写了一些蹩脚但可行的解决方案。让我们的编译器工作......:)
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Net;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string test = "{{ \"BusinessOrg\", \"BusinessOrgID\", \"BusinessOrg\", \"BusinessOrgID\"}, { \"BusinessParameters\", \"BusinessOrgID\", \"BusinessOrg\", \"BusinessOrgID\"}}";
string [,] a = GetArray(test);
string test2 = "{{ \"BusinessOrg2\", \"BusinessOrgID2\", \"BusinessOrg2\", \"BusinessOrgID2\"}, { \"BusinessParameters\", \"BusinessOrgID\", \"BusinessOrg\", \"BusinessOrgID\"}}";
string[,] b = GetArray(test2);
}
static string[,] GetArray(string source)
{
if (source == null)
throw new ArgumentNullException();
string sourceCode =
@"namespace Sample
{
public class ArrayConverter
{
public string [,] GetArray()
{
string [,] s = "+source + ";" +
@" return s;
}
}
}";
Dictionary<string, string> providerOptions = new Dictionary<string, string>
{
{"CompilerVersion", "v3.5"}
};
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
CompilerParameters compilerParams = new CompilerParameters
{GenerateInMemory = true,
GenerateExecutable = false};
CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, sourceCode);
if (results.Errors.Count != 0)
throw new Exception("Mission failed!");
object o = results.CompiledAssembly.CreateInstance("Sample.ArrayConverter");
MethodInfo mi = o.GetType().GetMethod("GetArray");
return (string [,])mi.Invoke(o, null);
}
}
}