检测字符串的一部分并在变量中使用它的一部分

时间:2015-04-22 17:52:04

标签: c#

我有一个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”部分分配给变量。

我不知道该怎么做。我尝试过使用子字符串和其他字符串技术,但我不知道我在做什么。

3 个答案:

答案 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.
}