VAL_ 646 AR_KickDetected 1 "Request" 0 "No Request" ;
请赐教,这个字符串应该如何进行分割?请给出代码或思路,代码最好用vb.net来写,多谢
如下图是期望结果,每个分割出来的字符串长度不是固定的。比如AR_KickDetected ,也可能是另一个长度不同的字符串。
实现了一个VB.NET版本的字符串分割示例:
效果如图:
示例代码:
Imports System.Text
Module Program
Sub Main(args As String())
Dim input As String = "VAL_ 646 AR_KickDetected 1 ""Request"" 0 ""No Request""; "
Dim result As New List(Of String)
Dim sb As StringBuilder = New StringBuilder()
Dim quote As Integer = 0
Dim c As Char
For Each c In input
If c = """" Then
quote += 1
Continue For
End If
If c = " " And quote Mod 2 = 0 Then
result.Add(sb.ToString())
sb.Clear()
Continue For
End If
If c = ";" Then
result.Add(sb.ToString())
quote = 0
sb.Clear()
Exit For
End If
If Not Equals(c, """") Then
sb.Append(c)
End If
Next
Dim item As String
For Each item In result
Console.WriteLine(item)
Next
Console.ReadKey()
End Sub
End Module
引号和分号都不要吗,用c语言写的,结果在代码后面,仅供参考
#include <stdio.h>
#include <string.h>
#define N 100 //分割字符串最大长度
#define M 100 //分割字符串最大个数
int main()
{
int i = 0, j = 0, k = 0;
char Input[1024] = {0};
char Output[M][N] = {0};
printf("Input Cut String:\n");
gets(Input);
while(Input[i] != '\0')
{
if(i == 0)
{
j = 0;
}
if(Input[i] == ' ')
{
if(k == 0)
{
k = 0;
}
else
{
j++;
k = 0;
}
i++;
continue;
}
if((Input[i] != '"') && (Input[i] != ';'))
{
Output[j][k++] = Input[i];
}
i++;
}
printf("Cut Resault:\n");
for(i = 0; i < j; i++)
{
if(Output[i][0] != '\0') // 防止空格结尾导致输出空行
{
printf("%s\n",Output[i]);
}
}
return 0;
}
参考下面的代码
my_str = "VAL_ 646 AR_KickDetected 1 "Request" 0 "No Request" ;"
方法一
a = my_str.split(";")
print(a)
c = dict()
for var in a:
if var !="":
b = var.split("=")
c[b[0]]=b[1]
print(c)
方法二
c={ var.split("=")[0]:var.split("=")[1] for var in my_str.split(";") if var!=""}
print(c)