去除字符"."之前的所有字符。

78

如何有效地删除字符串中位于字符“.”之前的所有字符?

输入: Amerika.USA

输出: USA


3
会不会只有一个周期? - James Black
7个回答

166

您可以像这样使用IndexOf方法Substring方法

string output = input.Substring(input.IndexOf('.') + 1);

上面的代码没有错误处理,因此如果输入字符串中不存在句号,将会出现问题。


9
@casperOne实际上,如果未找到结果,IndexOf会返回-1。对于子字符串的引用,字符串是从零开始的,因此如果没有句号,技术上它会返回整个字符串,对吗?只要字符串不为null,我认为这就足够了。 - jcolebrand
@drachenstern:如果未找到IndexOf,它将返回-1,如果将其传递给Substring,它将引发ArgumentOutOfRangeException。 - casperOne
2
@casperOne ~ 嘘嘘,这是 -1 +1 ... 所以它将始终为零或更多。这是你的代码,不是我的 ;) - jcolebrand
1
@drachenstern:嗯,是的,正确的。在这种情况下它将给你整个字符串。 - casperOne
@casperOne ~ 哈哈哈,我也得读三遍才明白,只是一点纸笔练习来打发时间,对吧? - jcolebrand
1
@drachenstern:没错,但这是一件如果你不小心就会被咬的事情。干得好! - casperOne

33

你可以尝试这样做:

string input = "lala.bla";
output = input.Split('.').Last();

7
如果有超过一个句号,就会出现问题。 - Mike Cole
@MikeCole 为什么?.Last() 确保你在句号后获得最后一个单词。 - C. Augusto Proiete
@CaioProiete 因为 OP 要求删除句点前的字符,我们假设给定字符串中只有一个句点。在这种情况下,答案是正确的。否则就会存在歧义。 - Baz Guvenkaya
1
"string[]"没有定义'Last'。 - Cegone
@CaioProiete 如果输入的字符串包含一个以上的句号(例如A.B.C),您的答案将给出C(删除最后一个句号之前的字符),而提问者可能希望得到B.C(删除第一个句点之前的字符)。然而,由于提问者似乎认为输入字符串仅包含一个句号,因此并不十分清楚。 - Ruben9922
1
@Ruben9922 OP 似乎想要捕获 C 而不是 B.C,根据他的问题和例子。看起来他有一个由点分隔的层次结构。您的 A.B.C 示例作为层次结构将类似于 PlanetEarth.America.USA。他可能仍然想捕获层次结构中的最后一项:USA - C. Augusto Proiete

12
string input = "America.USA"
string output = input.Substring(input.IndexOf('.') + 1);

6

我通常使用的扩展方法来解决这个问题:

public static string RemoveAfter(this string value, string character)
    {
        int index = value.IndexOf(character);
        if (index > 0)
        {
            value = value.Substring(0, index);
        }
        return value;
    }

    public static string RemoveBefore(this string value, string character)
    {
        int index = value.IndexOf(character);
        if (index > 0)
        {
            value = value.Substring(index + 1);
        }
        return value;
    }

6
String input = ....;
int index = input.IndexOf('.');
if(index >= 0)
{
    return input.Substring(index + 1);
}

这将返回新单词。


4
public string RemoveCharactersBeforeDot(string s)
{
 string splitted=s.Split('.');
 return splitted[splitted.Length-1]
}

附注:这将保留点字符串的所有部分,如果您需要它们所有,则是可取的,但如果您只需要最后一个,则是不必要的。 - Joey

3

以下是一些方法,如果字符不存在,则返回原始字符串。

这个方法在定位点之后第一次出现时截断字符串:

public static string truncateStringAfterChar(string input, char pivot){         
    int index = input.IndexOf(pivot);   
    if(index >= 0) {
        return input.Substring(index + 1);          
    }           
    return input;       
}

这个函数会在最后一个分隔符后面切割字符串:

public static string truncateStringAfterLastChar(string input, char pivot){         
    return input.Split(pivot).Last();   
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接