繁体   English   中英

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 地址。 我只需要增加最后一位/数字。

预期输出:

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

输出的“下一个最高”值:

1.23.4.35

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

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

因此,我建议您将字符串分成数字部分。 将最后一部分解析为整数。 增加它,然后再次创建字符串。 我将其保留为张贴者实际编写几行代码的练习。 好的做法!

像这样:

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

}

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

我的解决方案是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM