[英]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.