C#:仅增加字符串的最后一个数字

C#: Increment only the last number of a String

我有这样的字符串:

1.23.4.34

12.4.67

127.3.2.21.3

1.1.1.9

这应该是一组数字,以“.”分隔。符号,类似于 ip 地址。我只需要增加最后一个 digit/digits.

预期输出:

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;

如果我使用上面的代码,我只需要替换最后一个“.”之后的字符。带有新数字的符号。我如何完成这项工作,好人? :)

在我看来,一种方法是:

  • 拆分 . 上的字符串以获得组件数组。
  • 将最后的分量转为整数。
  • 增加那个整数。
  • 将其转回字符串。
  • 重新组合 . 个字符的组件。

例如,请参阅以下程序:

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);
        }
    }
}

输出 "next highest" 值:

1.23.4.35

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

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

您可以使用 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);

像这样:

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。但是这个逻辑并不那么复杂。

就这么简单,使用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

使用一些 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() + ".");
    }

}

注意: 在 phone 所以无法测试。

我的解决方案是:

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++);
}