[英]Remove texts from an array of strings and check if a specific string contains in the array of strings?
我正在尝试从 MySQL 获取数据到 Unity。 数据格式为ID:AZ22; ID:TR56;...
ID:AZ22; ID:TR56;...
我能够获取数据。 但是,我想从数据字符串数组中删除文本ID:
:,最后我想检查来自 Unity 的特定字符串是否包含在数据字符串数组中。 我正在尝试使用Contains()
函数,但它似乎不起作用。 是否在第 5 个位置找到字符串对我来说无关紧要。 我只想让代码检查是否匹配。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class ReceiveData : MonoBehaviour
{
public string checkForString = "AZ22";
public string[] Items;
IEnumerator Start()
{
WWW data = new WWW("http://localhost/GetID.php");
yield return data;
string dataString = data.text;
Items = dataString.Split(';');
if(checkForString.Contains(dataString))
{
Debug.Log("String Contains");
}
else
{
Debug.Log("String does not contain");
}
}
}
Items
是形式的字符串数组
{
"ID:AZ22",
"ID:TR56",
...
}
方法
Items.Contains(checkForString)
检查数组Items
包含字符串checkForString
,即比较每个项目是否等于checkForString
。 由于 items 中的字符串都包含"ID:"
部分,所以没有一个字符串等于"AZ22"
。 您可以通过将条目与"ID:AZ22"
进行比较来解决这个问题 - 如果您想在代码中保持 id 不变,这可以通过
Items.Contains($"ID:{checkForString}")
但是,您可以立即删除"ID:"
Items = dataString.Split(';')
.Select(s => s.Substring(3))
.ToArray();
当然,在这种情况下,您不必将"ID:"
添加到Contains
中。
如果你得到错误
startIndex
不能大于字符串的长度。
这意味着数组中的任何字符串都不具有"ID:XXXXX"
形式。 在这种情况下,您可以在剥离前缀之前过滤项目
Items = dataString.Split(';')
.Where(IsValidId)
.Select(s => s.Substring(3))
.ToArray();
和
private bool IsValidId(string s)
{
return s.StartsWith("ID:") && s.Length > 3;
}
问题也可能是,原始字符串以;
结尾;
. 在这种情况下, Split
返回一个空字符串作为最后一项。 这可以通过使用StringSplitOptions
来缓解
Items = dataString.Split(new[]{';'}, StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Substring(3))
.ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.