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++);
}
我有这样的字符串:
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++);
}