c#中的子串帮助

时间:2010-10-13 06:11:55

标签: c#

我有字符串qty__c,可能有也可能没有小数点 下面的代码给了我一个System.ArgumentOutOfRangeException:Length不能小于零。

qty__c = qty__c.Substring(0, qty__c.IndexOf("."));

如果没有“。”,我如何迎合?

由于

5 个答案:

答案 0 :(得分:6)

最简单的方法就是单独测试它:

int dotIndex = quantity.IndexOf('.');
if (dotIndex != -1)
{
    quantity = quantity.Substring(0, dotIndex);
}

还有其他选择......例如,如果真的希望在单个语句中执行此操作,则可以使用上面的条件运算符,或者:

quantity = quantity.Split('.')[0];

或稍高效:

// C# 4 version
quantity = quantity.Split(new[] {'.'}, 2)[0];

// Pre-C# 4 version
quantity = quantity.Split(new char[] {'.'}, 2)[0];

(第二种形式在找到第一个点后有效地停止分裂。)

另一种选择是使用正则表达式。

总的来说,我认为第一种方法是最明智的。如果您发现需要经常这样做,请考虑编写一个方法来封装它:

// TODO: Think of a better name :)
public static string SubstringBeforeFirst(string text, string delimiter)
{
    int index = text.IndexOf(delimiter);
    return index == -1 ? text : text.Substring(0, index);
}

答案 1 :(得分:3)

在调用qty__c之前,您只需测试Substring是否有一个点:

var pointPos = qty__c.IndexOf('.');
if (pointPos != -1)
{
  qty__c = qty__c.Substring(0, pointPos);
}

答案 2 :(得分:1)

对该字符串使用IndexOf方法。如果返回值为-1,则表示没有搜索到的字符。

int index = mystring.IndexOf('.');

在您的代码中,您没有检查IndexOf的返回值。在'。'的情况下字符串中不存在,将抛出异常,因为SubString已作为第二个参数传递-1。

答案 3 :(得分:0)

  var indexofstring=quantity.Indexof('.');
if(indexofstring!=-1)
{
quantity=quantity.SubString(0,indexofstring);
}

答案 4 :(得分:0)

假设您正在寻找一个数字中的小数点,该数字在偏移3处 '123.456'和'123',那么一个解决方案是

var index =(mystring&“。”)。IndexOf(“。”)

(抱歉VB,我不确定C#语法)