我有一个TCP服务器设置,它接收来自客户端的文本字符串。
data = new byte[1024];
recv = client.Receive(data);
string recvconv = Encoding.ASCII.GetString(data, 0, recv);
我可以检测一个字符串并执行类似的操作,例如:
if (recvconv == "l")
{
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
Console.WriteLine("l was printed...");
}
但是我只需要检测字符串的一部分。例如,“name:programmer”。我需要能够检测到“name:”部分,然后将字符串的“programmer”部分分配给变量。
我不知道该怎么做。我尝试过使用子字符串和其他字符串技术,但我不知道我在做什么。
答案 0 :(得分:0)
您可以使用String.Split方法。
https://msdn.microsoft.com/en-us/library/system.string.split%28v=vs.110%29.aspx
data = new byte[1024];
recv = client.Receive(data);
string recvconv = Encoding.ASCII.GetString(data, 0, recv);
string[] results = recvconv.Split(':');
foreach (string result in results)
{
Console.WriteLine(result);
}
答案 1 :(得分:0)
使用String.StartsWith()
检测字符串开头的名称,如果您知道收到该字符串时的名称。
如果有已知的分隔符,请使用String.Split()
。 String.Split()
会将字符串分解为数组。获取数组的每个元素并将它们分配给局部变量
data = new byte[1024];
recv = client.Receive(data);
string recvconv = Encoding.ASCII.GetString(data, 0, recv);
string name = String.Empty;
string programmer = String.Empty;
if (recvconv.StartsWith("name"))
{
string[] results = recvconv.Split(':');
name = results[0];
programmer = results[1];
}
// Do what you need to do with name & programmer
如果我理解您的评论,您希望能够有选择地将收到的数据分配给不同的变量。
因此,如果您打算接收的数据采用以下格式:
identifier:value
identifier
是“name”,“date”或您可能期望的任何其他字段名称,而value
是该字段的值,那么您最好只做一个String.Split()
收到的数据。如果要执行switch/case
评估,那么数组的第一个元素。
byte[] data = new byte[1024];
int recv = client.Receive(data);
string recvconv = Encoding.ASCII.GetString(data, 0, recv);
string[] dataPieces = recvconv.Split(':');
switch (dataPieces[0])
{
case "name":
// Do what you need to do
break;
case "date":
// Do what you need to do
break;
// Add more case/breaks if necessary
default:
// Possible error
break;
}
答案 2 :(得分:0)
查找模式的最佳方法是使用.net库来处理模式。
> docs <- tm_map(docs, stemDocument)
> dtm <- DocumentTermMatrix(docs)
> freq <- colSums(as.matrix(dtm))
> ord <- order(freq)
> freq[tail(ord)]
one experi will can lucid dream
287 312 363 452 1018 2413
> freq[head(ord)]
abbey abdomin abdu abraham absent abus
1 1 1 1 1 1
> dim(dtm)
[1] 1 5265
> dtms <- removeSparseTerms(dtm, 0.1)
> dim(dtms)
[1] 1 5265
> dtms <- removeSparseTerms(dtm, 0.001)
> dim(dtms)
[1] 1 5265
> dtms <- removeSparseTerms(dtm, 0.9)
> dim(dtms)
[1] 1 5265
>
正则表达式使您能够将模式定义为正则表达式,例如:
string recvconv = "hello name:alex bye";
var math = Regex.Match(recvconv, @" name:[a-zA-Z]+"); // here you define the pattern to match.
if (math.Success) // pattern matched
{
var programmer = math.Groups[0].Value.Substring("name:".Length + 1); // select the first pattern and take the name value.
}