String 以编程方式构建字符串并处理尾随或前导布尔运算符

String 以编程方式构建字符串并处理尾随或前导布尔运算符,string,pseudocode,String,Pseudocode,我正在应用程序中使用Lucene。因此,我有一个表单,允许用户通过从下拉列表中选择要搜索的内容来构建查询。 一旦用户提交,我将构建查询,其结果如下: var formedQuery= string.Empty; foreach(var field in fields) { if (field.name != 'condition so you never know which field from fields will be 1st') formedQuery += "

我正在应用程序中使用Lucene。因此,我有一个表单,允许用户通过从下拉列表中选择要搜索的内容来构建查询。 一旦用户提交,我将构建查询,其结果如下:

var formedQuery= string.Empty;
foreach(var field in fields)
{
    if (field.name != 'condition so you never know which field from fields will be 1st')
        formedQuery += " AND" + field.name + ":" field.value;
}
现在的问题是,该语句将以“AND”开头

现在我通常以以下内容结束:

formedQuery = formedQuery.Substring(4) //Trim the first 4 characters
其他程序员通常更愿意做:

var formedQuery= string.Empty;
var i = false;
foreach(var field in fields)
{
    if (false && 
        field.name != 'condition so you never know which field from fields will be 1st')
    {
        formedQuery += " AND" + field.name + ":" field.value;
        i = true;
    }
    else
        formedQuery += " " + field.name + ":" field.value;
}
有没有其他的技巧,人们喜欢用在我没有想到的这类事情上?
我喜欢前者。

我一直用前者。主要是因为我觉得它更干净


另一种方法:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name

我一直用前者。主要是因为我觉得它更干净


另一种方法:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name

根据语言的不同,我还使用了另外两种解决方案。第一个与第二个类似,但只是更改了“第一个字段”检查

但我通常使用的解决方案是一个有序列表。假设我可以以任何看起来合理的方式扩展您的示例代码:

var formedQuery = list.Empty;
foreach(var field in fields)
{
    if (field.name != 'condition so you never know which field from fields will be 1st')
    {
        formedQuery.push(field.name + ":" field.value);
    }
}
formedQuery = formedQuery.join(" AND ");

这还有一个优点,就是在汇编字符串时不必制作大量不必要的字符串副本(在某些语言中,这很昂贵)。

我还使用了两种其他解决方案,这取决于语言。第一个与第二个类似,但只是更改了“第一个字段”检查

但我通常使用的解决方案是一个有序列表。假设我可以以任何看起来合理的方式扩展您的示例代码:

var formedQuery = list.Empty;
foreach(var field in fields)
{
    if (field.name != 'condition so you never know which field from fields will be 1st')
    {
        formedQuery.push(field.name + ":" field.value);
    }
}
formedQuery = formedQuery.join(" AND ");

这还有一个优点,就是在汇编字符串时不必制作大量不必要的字符串副本(在某些语言中,这很昂贵)。

我非常喜欢你的第二种方法!我很喜欢你的第二条路!