问题描述
我正在研究如何遍历一个带有单词的字符串,从结尾开始,逐字逐句地进行。
输出应该是这样的:
- word1 word2 word3 word4
- word1 word2 word3
- word1 word2
- word1
我现在真的不知道从哪里/如何开始。相反,我开始工作了,但事实证明这不是我需要的(见下文)。
string descriptionText = "Column Grid Building"; //example
string[] description1TextArray = descriptionText.Split(' ');
int noItems = description1TextArray.Count();
for (int i = 0; i < noItems; i++)
{
if (i == 0)
{
search = search + description1TextArray[i];
}
else
{
search = search + " " + description1TextArray[i];
}
foreach (DaTarow row in dt.Rows)
{
description1 = row[0].ToString();
abbreviation1 = row[1].ToString();
if (description1 == search || abbreviation1 == search)
{
comboBoxDescription1.Selectedindex = comboBoxDescription1.FindStringExact(description1);
}
}
}
编辑:
抱歉给您带来任何混淆。
我以字符串“word1 word2 word3 word4”开头。我已经将每个单词设置为一个数组。
string[] description1TextArray = descriptionText.Split(' ');
int noItems = description1TextArray.Count();
我需要根据数据表中的值检查字符串。例如,dataTable 中的值是“Column Grid”。我的输入是“列网格构建”。
我需要从头到尾检查的原因是因为数据表中存在重叠的值,例如“Column Grid”和“Columnn”。当我从头到尾检查字符串时,永远找不到值“Column Grid”,因为在“Column”上已经找到匹配项。
我希望这能更好地解释它。
解决方法
你可以试试这个:
using System.Linq;
string myString = "word1 word2 word3 word4";
var words = myString.Split(' ');
for ( int index = words.Length; index > 0 ; index-- )
{
string sentence = string.Join(" ",words.Take(index));
Console.WriteLine(sentence);
}
这是一个循环,通过对索引器进行倒计时来获取所需的单词数。
输出
word1 word2 word3 word4
word1 word2 word3
word1 word2
word1
,
试试这个方法
string data = "word1 word2 word3 word4";
var strarray = data.Split(' ');
for ( int i = strarray.Length - 1; i >= 0; i-- )
{
Console.WriteLine(strarray[i]);
}
,
即使在编辑之后这个问题也有点令人困惑...如果我理解正确的话,你的问题是你的数据库中有一些类似的字符串,例如你得到:
1)“列”
2)“列网格”
3)“列网格你好”
您收到字符串“Column grid hello world”作为输入,您需要测试此字符串与存储在数据库中的所有 3 个项目。 理论上所有 3 个字符串都与您的输入字符串匹配,但您想知道哪一个最相似?比如本例中的第三个“列磨你好”。
是吗?
如果这是问题并不像你想象的那么容易,因为被称为模糊(或近似)字符串匹配。
无论如何,如果您 100% 确定您的输入字符串将始终是您的 db 中的字符串 + 其他内容,您可以尝试做不同的事情,因为我没有看到拆分成一组单词的意义.不能只使用 .Contains() 方法吗?
例如:
string inputString; // user input string
List<string> yourOrderedDbCollection; // dunno if you are using sql or linq,anyway just order by lenght ascending
string foundItem; // the final found item
foreach (string yourDbString in yourOrderedDbCollection)
{
if(inputString.Contains(yourDbString))
{
foundItem = yourDbString;
break;
}
}