字符串操作 - 最简单的方法C#

时间:2014-04-03 11:34:21

标签: c#

实施以下方案的最佳方式是什么

string sample = "Mountain View XX,Lake"

我期待2个场景为o / p

山景 湖

我可以通过sample.split[','][1]

获得湖泊

获得Mountain View ignoring XX

的最佳方式是什么?

我尝试使用多个拆分并将它们连接到的lastIndex !!!

还有其他更简单的方法吗?

8 个答案:

答案 0 :(得分:1)

string.Substring方法正常工作:

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

对于样本,还有string.LastIndexOf到子字符串的最后一个字符为止:

sample = sample.Substring(0, sample.LastIndexOf(","));

在您的示例中,两者都可以同时工作,因为只有,个字符。

在此之后,您可以删除直到最后空格字符。

sample = sample.Substring(0, sample.LastIndexOf(" "));

答案 1 :(得分:0)

使用String.Replace

sample= sample.Replace("XX", "");

答案 2 :(得分:0)

尝试使用正则表达式。 (\ W + \ S +?\ W +)\ S +?XX \,(\ W +) http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx 第1组包含Mountain View 第2组包含Lake

答案 3 :(得分:0)

你说你试过多次分裂。您可以在一个string.Split()中指定多个分隔符:

var parts
    = sample.Split(new[] { "XX", "," }, StringSplitOptions.RemoveEmptyEntries);

现在你有两件事:

var part1 = parts[0];  // Mountain View
var part2 = parts[1];  // Lake

答案 4 :(得分:0)

目前尚不清楚为什么要删除字符串中的确切部分,但是这里有一些不同的方法可以为该字符串执行此操作:

string sample = "Mountain View XX,Lake"

// option 1
string removed = sample.Remove(14, 3);

// option 2
string replaced = sample.Replace("XX,", String.Empty);

// option 3
string[] parts = sample.Split(',');
parts[0] = parts[0].Substring(0, 14);
string concatenated = String.Concat(parts);

如果字符串的XX部分确实是其他内容,例如街道号码,那么您需要一些东西来确定要删除多少字符串。以下是一些例子:

string sample = "Mountain View 123,Lake"

// option 1; remove digits followed by a comma
string replaced = Regex.Replace(sample, "\d+,", String.Empty);

// option 2; remove what's after the last space in the part before the comma
string[] parts = sample.Split(',');
parts[0] = parts[0].Substring(0, parts[0].LastIndexOf(" ") + 1);
string concatenated = String.Concat(parts);

答案 5 :(得分:0)

你离开了很多。 XX总是字面意思是XX吗?您是否保证确切的格式或您是否信任用户输入?如果你知道你想要所有开头的角色,直到你达到双重大写字母组合,你可以做一个非常简单的正则表达式。我不得不查看它,因为我使用它已经多年了,但它会非常简单。

这就是诀窍。它确实包括两个XX之前的空间。我假设XX可以是任何大写字母。

    Regex reg;
    reg = new Regex(".{1,}(?=[A-Z]{2})");
    var output = reg.Match("Mountain View XX, Lake");
    string text = output.Value;

你可以在这里测试一下: http://www.regexplanet.com/advanced/dotnet/index.html 并在这里了解更多关于正则表达式 http://www.regular-expressions.info/tutorial.html

答案 6 :(得分:0)

我建议你一起去:

string sample = "Mountain View XX,Lake";
Console.WriteLine(sample.Split(',')[1]);// Lake
Console.WriteLine(sample.Remove(sample.IndexOf("XX,")).Trim()); // Mountain View

演示:http://ideone.com/RizzzC

答案 7 :(得分:0)

我可能会这样做:

public static string[] MyCustomSplit(string input, List<string> reservedWords)
{
    List<string> outputLines = new List<string>();

    string[] lines = input.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

    foreach (string line in lines)
    {
        if (!string.IsNullOrWhiteSpace(line))
        {
            string[] parts = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            List<string> lineParts = new List<string>();

            foreach (string part in parts)
            {
                if (!reservedWords.Contains(part))
                {
                    lineParts.Add(part);
                }
            }

            outputLines.Add(string.Join(" ", lineParts.ToArray()));
        }
    }

    return outputLines.ToArray();
}

然后

string sample = "Mountain View XX,Lake";
List<string> reservedWords = new List<string>() { "XX" };
string[] test = MyCustomSplit(sample, reservedWords);

结果与:

string[0] = Mountain View
string[1] = Lake

或类似的东西:

public static string[] MyCustomSplitAndCleanup(string input)
{
    List<string> outputLines = new List<string>();

    string[] lines = input.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

    foreach (string line in lines)
    {
        if (!string.IsNullOrWhiteSpace(line))
        {
            string[] parts = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            List<string> lineParts = new List<string>();

            for (int index = 0; index < parts.Length; index++ )
            {
                string part = parts[index];

                int numericValue = 0;

                bool validPart = true;

                if (int.TryParse(part, out numericValue))
                {
                    if (index == 0 || index == parts.Length - 1)
                    {
                        validPart = false;
                    }
                }

                if (validPart)
                {
                    lineParts.Add(part);
                }
            }

            outputLines.Add(string.Join(" ", lineParts.ToArray()));
        }
    }

    return outputLines.ToArray();
}

涵盖了这个:

string sample1 = "Mountain View 32,Lake";
string sample2 = "17 Park place,Something";

string[] test1 = MyCustomSplitAndCleanup(sample1);
string[] test2 = MyCustomSplitAndCleanup(sample2);