【问题标题】:replace part of the string in C#替换C#中的部分字符串
【发布时间】:2018-03-08 03:35:54
【问题描述】:

我有很多字符串,它们有 多个空格和一个正斜杠,如下所示:

string a="xxxxxx xxx xxxxxxxx xxxxxx aaa/xxxxxxxxxxxxxxx";

或

string b="xxxx xxx xxxxxx bbbbb/xxxxxxx xxx";

或

string c="xx xx 12345/x xx"

我需要做的是用新字符串替换子字符串“aaa”或“bbbbb”或“12345”(请注意,子字符串只是示例,它们可以是任何东西)我想要。
子字符串 "aaa" 或 "bbbbb" 或 "12345" 或任何东西的特点是子字符串就在唯一的一个正斜杠之前,并且就在该斜杠前面和最接近该斜杠的空格之后。

如何找到这个子字符串,以便用我想要的新子字符串替换它?谢谢。

【问题讨论】:

  • 您是否尝试过在互联网上搜索如何做到这一点?
  • 如果你知道空格在哪里,并且你知道斜线在哪里,那么两者之间的数字必须是固定的,除非字符串发生变化。
  • 如果你想学习一个方便的新技能(有些人会说添加另一个问题),看看regular expressions。他们可以做到这一切,甚至更多。否则,您可以编写自己的自定义字符串解析器,这会更快。取决于您想要什么:您将在余生中使用的多功能工具或解决此特定问题的方法:)
  • 请使用 string.replace(char oldchar, char newchar)
  • 您可以按原样在 Google 中输入您的问题的标题,我相信前 20 个结果会提供答案 ????

标签: c# substring


【解决方案1】:

好吧好吧好吧

采用通用方法:

        public string Replacement(string input, string replacement)
        {
            string[] words = input.Split(' ');
            string result = string.Empty;

            for (int i = 0; i < words.Length; i++)
            {
                if(words[i].Contains('/'))
                {
                    int barIndex = Reverse(words[i]).LastIndexOf('/') + 1;
                    int removeLenght = words[i].Substring(barIndex).Length;
                    words[i] = Reverse(words[i]);
                    words[i] = words[i].Remove(barIndex, removeLenght);
                    words[i] = words[i].Insert(barIndex, Reverse(replacement));
                    string ToReverse = words[i];
                    words[i] = Reverse(ToReverse);

                    break;
                }
            }

            for(int i = 0; i < words.Length; i++)
            {
                result += words[i] + " ";
            }

            result = result.Remove(result.Length - 1);

            return result;
        }

        public string Reverse(string s)
        {
            char[] charArray = s.ToCharArray();
            Array.Reverse(charArray);
            return new string(charArray);
        }

作为对 >> 我需要一个通用的方法来替换斜线和最接近它的空间之间的任何东西

【讨论】:

    【解决方案2】:

    虽然选择了建议的答案。我仍然决定回答我自己的问题。

    string substr=""//any string I want
    string a=OldString.split('/');//split by '/'
    string b=a[0].Substring(0,a[0].LastIndexOf(' '));//get the substring before the last space
    string NewString= b+ substr + a[1];//the substring between the space and the '/' is now replaced by substr
    

    【讨论】:

      【解决方案3】:

      您应该考虑使用regex

      表达式可能是这样的"([^/]+)\\s(\\w+)/(.+)"

      Regex.Replace (yourString, "([^/]+)\\s(\\w+)/(.+)", "$1 replacement/$3") Regex.Replace

      【讨论】:

      • 任何知道如何让双反斜杠出现的人都可以随意编辑。尝试在手机上编辑效果不佳。
      【解决方案4】:

      使用 string.Replace("", "");

      string a="xxxxxx xxx xxxxxxxx xxxxxx aaa/xxxxxxxxxxxxxxx";
      string b="xxxx xxx xxxxxx bbbbb/xxxxxxx xxx";
      
      string resultA = a.Replace("aaa", "Your replacement");
      string resultB = b.Replace("bbbbb", "Your replacement");
      

      【讨论】:

      • 这不是一个理想的解决方案,因为 op 说可以有很多 a 和 b
      • @Agent_Orange 他的回答是正确的。他正在显示与“a”不同的“aaa”。更具体地说,他应该说“aaa/”,但重点仍然存在。
      • 嗨,我不是这个意思。我需要一个通用的方法来替换斜线和最接近它的空间之间的任何东西。
      • 对不起,我要替换的子字符串的特点是它在空格和斜杠之间。 (只有一个斜线。空格是斜线前面和最靠近斜线的那个)。
      • 您好,我之前可能没有正确表达自己。现在我已经编辑了我的问题。@Sam
      猜你喜欢
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多