【问题标题】:C#: Increment only the last number of a StringC#:仅增加字符串的最后一个数字
【发布时间】:2015-05-03 15:50:41
【问题描述】:

我的字符串看起来像这样:

1.23.4.34

12.4.67

127.3.2.21.3

1.1.1.9

这应该是一个数字集合,用“.”分隔。符号,类似于 IP 地址。我只需要增加最后一位数。

预期输出:

1.23.4.35

12.4.68

127.3.2.21.4

1.1.1.10

基本上,增加最后一个 '.' 之后的数字。符号。

我试过了:

char last = numberString[numberString.Length - 1];
int number = Convert.ToInt32(last);
number = number + 1;

如果我使用上面的代码,我只需要替换最后一个 '.' 之后的字符。带有新号码的符号。各位好人,我该怎么做呢? :)

【问题讨论】:

  • 如果最后一位是 9 会发生什么?
  • MW,我试图澄清你的意思是最后的 number (可能是多个数字)而不仅仅是最后一个数字,因为你的问题模棱两可 - 你似乎说 both 在不同的点上。如果它真的只是最后一个数字,请告诉我们(正如 Hayden 指出的那样,告诉我们在数字是 9 时该怎么做)。

标签: c# .net regex char int


【解决方案1】:

在我看来,一种方法是:

  • . 上拆分字符串以获取组件数组。
  • 将最后的分量变成整数。
  • 增加该整数。
  • 将其转回字符串。
  • . 字符重新组合组件。

例如,请参阅以下程序:

using System;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            String original = "1.23.4.34";
            String[] components = original.Split('.');
            int value = Int32.Parse(components[components.Length - 1]) + 1;
            components[components.Length - 1] = value.ToString();
            String newstring = String.Join(".",components);
            Console.WriteLine(newstring);
        }
    }
}

输出“下一个最高”值:

1.23.4.35

【讨论】:

    【解决方案2】:

    你可以使用 string.LastIndexOf()。

    string input = "127.3.2.21.4";
    int lastIndex = input.LastIndexOf('.');
    string lastNumber = input.Substring(lastIndex + 1);
    string increment = (int.Parse(lastNumber) + 1).ToString();
    string result = string.Concat(input.Substring(0, lastIndex + 1), increment);
    

    【讨论】:

      【解决方案3】:

      您需要提取的不仅仅是最后一个字符。如果最后一个字符是 9 然后你加 1 怎么办?然后,您还需要在前面的字符中正确添加一个。例如,字符串 5.29 应该被处理为 5.30 而不仅仅是 5.210 或 5.20。

      所以我建议您将字符串拆分为数字部分。将最后一段解析为整数。增加它,然后再次创建字符串。我把它留作发帖者实际编写几行代码的练习。好习惯!

      【讨论】:

        【解决方案4】:

        类似这样的:

        var ip = "1.23.4.34";
        var last = int.Parse(ip.Split(".".ToCharArray(), 
                        StringSplitOptions.RemoveEmptyEntries).Last());
        last = last + 1;
        ip = string.Format("{0}.{1}",ip.Remove(ip.LastIndexOf(".")) , last);
        

        如果你在处理 IP,在 .034 的情况下会有一些额外的代码,应该是 035 而不是 35。但这个逻辑并没有那么复杂。

        【讨论】:

          【解决方案5】:

          就这么简单,使用Split()Join()字符串方法

           String test = "1.23.4.34"; // test string
          
           String[] splits = test.Split('.'); // split by .
          
           splits[splits.Length - 1] = (int.Parse(splits[splits.Length - 1])+1).ToString(); // Increment last integer (Note : Assume all are integers)
          
           String answ = String.Join(".",splits); // Use string join to make the string from string array. uses . separator 
          
           Console.WriteLine(answ); // Answer  : 1.23.4.35
          

          【讨论】:

            【解决方案6】:

            使用一点 Linq

            int[] int_arr = numberString.Split('.').Select(num => Convert.ToInt32(num)).ToArray();
            
            int_arr[int_arr.Length - 1]++;
            numberString = "";
            
            for(int i = 0; i < int_arr.Length; i++) {
                if( i == int_arr.Length - 1) {
                    numberString += int_arr[i].ToString();
                }
                else {
                    numberString += (int_arr[i].ToString() + ".");
                }
            
            }
            

            注意:在手机上,因此无法测试。

            【讨论】:

            • FWIW,它工作正常,除了它在最后给出了一个无关的.1.23.4.35.。这可能可以用子字符串来解决。
            【解决方案7】:

            我的解决方案是:

            private static string calcNextCode(string value, int index)
            {
                if (value is null) return "1";
                if (value.Length == index + 1) return value + "1";
            
                int lastNum;
                int myIndex = value.Length - ++index;
                char myValue = value[myIndex];
            
                if (int.TryParse(myValue.ToString(), NumberStyles.Integer, null, out lastNum))
                {
                    var aStringBuilder = new StringBuilder(value);
            
                    if (lastNum == 9)
                    {
                        lastNum = 0;
                        aStringBuilder.Remove(myIndex, 1);
                        aStringBuilder.Insert(myIndex, lastNum);
                        return calcNextCode(aStringBuilder.ToString(), index++);
                    }
                    else
                    {
                        lastNum++;
                    }
                    aStringBuilder.Remove(myIndex, 1);
                    aStringBuilder.Insert(myIndex, lastNum);
                    return aStringBuilder.ToString();
                }
            
                return calcNextCode(value, index++);
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-06-18
              • 1970-01-01
              • 2019-06-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多