从末尾遍历字符串,每次从一个单词开始
Iterate through string from end to start one word at at time
我正在研究如何使用单词遍历字符串,从末尾开始,逐字逐句。
输出应该是这样的:
- word1 word2 word3 word4
- word1 word2 word3
- word1 word2
- word1
我现在 where/how 真的不想开始。相反,我开始工作,但事实证明这不是我需要的(见下文)。
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();
我需要根据数据table 中的值检查字符串。例如,dataTable 中的值为“Column Grid”。我的输入是“柱网建筑”。
我需要从头到尾检查的原因是因为数据 table 中存在重叠的值,例如“Column Grid”和“Columnn”。当我从头到尾检查字符串时,从未找到值“Column Grid”,因为已在“Column”上找到匹配项。
我希望这能更好地解释它。
试试这个方法
string data = "word1 word2 word3 word4";
var strarray = data.Split(' ');
for ( int i = strarray.Length - 1; i >= 0; i-- )
{
Console.WriteLine(strarray[i]);
}
你可以试试这个:
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
即使在编辑之后,这个问题还是有点令人困惑...如果我理解正确的话,你的问题是你的数据库中有一些类似的字符串,例如你得到:
1)“专栏”
2)“列网格”
3)"列网格你好"
您收到字符串“Column grid hello world”作为输入,您需要测试此字符串与存储在数据库中的所有 3 个项目。
理论上所有 3 个字符串都匹配您的输入字符串,但您想知道哪个最相似?例如本例中的第 3 个“专栏研磨你好”。
对吗?
如果是这个问题并不像你想象的那么容易,因为被称为Fuzzy(或近似)字符串匹配.
无论如何,如果您 100% 确定您的输入字符串将始终是数据库中的字符串 + 其他内容,您可以尝试做不同的事情,因为我看不出拆分成数组的意义的话。不能只使用 .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;
}
}
我正在研究如何使用单词遍历字符串,从末尾开始,逐字逐句。
输出应该是这样的:
- word1 word2 word3 word4
- word1 word2 word3
- word1 word2
- word1
我现在 where/how 真的不想开始。相反,我开始工作,但事实证明这不是我需要的(见下文)。
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();
我需要根据数据table 中的值检查字符串。例如,dataTable 中的值为“Column Grid”。我的输入是“柱网建筑”。
我需要从头到尾检查的原因是因为数据 table 中存在重叠的值,例如“Column Grid”和“Columnn”。当我从头到尾检查字符串时,从未找到值“Column Grid”,因为已在“Column”上找到匹配项。
我希望这能更好地解释它。
试试这个方法
string data = "word1 word2 word3 word4";
var strarray = data.Split(' ');
for ( int i = strarray.Length - 1; i >= 0; i-- )
{
Console.WriteLine(strarray[i]);
}
你可以试试这个:
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
即使在编辑之后,这个问题还是有点令人困惑...如果我理解正确的话,你的问题是你的数据库中有一些类似的字符串,例如你得到:
1)“专栏”
2)“列网格”
3)"列网格你好"
您收到字符串“Column grid hello world”作为输入,您需要测试此字符串与存储在数据库中的所有 3 个项目。 理论上所有 3 个字符串都匹配您的输入字符串,但您想知道哪个最相似?例如本例中的第 3 个“专栏研磨你好”。
对吗?
如果是这个问题并不像你想象的那么容易,因为被称为Fuzzy(或近似)字符串匹配.
无论如何,如果您 100% 确定您的输入字符串将始终是数据库中的字符串 + 其他内容,您可以尝试做不同的事情,因为我看不出拆分成数组的意义的话。不能只使用 .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;
}
}