c#中分隔字符串中的数字和单位
Separating number and unit in a string in C#
我必须在c#中用c++写一个等价的代码,
string val_in;
float val;
char unit[100];
val_in = NoSpace(val_in);
int nscan = sscanf(val_in.c_str(), "%f%s", &val, &unit);
if (nscan < 2) {
return val_in; //do nothing if scan fail
}
,其中NoSpace()
方法裁剪并删除val_in
中的所有空格。
我在这里看了一下SO,大多数类似的问题都涉及包含分隔符(如空格或逗号)的字符串,但不适用于这种情况。所以我转向RegEx。
目前为止,我有这个
string val_in;
float val;
char[] unit = new char[100];
string[] val_arr;
val_in = NoSpace(val_in);
val_arr = Regex.Split(val_in, @"([-]?d*.?d+)([a-zA-Z]+)");
val = Single.Parse(val_arr[1]);
if (val_arr.Length < 2) {
return val_in; //do nothing if scan fail
}
它工作到目前为止,但我想知道是否有另一种方法来做到这一点?我对RegEx有点警惕,因为根据对这个问题的公认答案,由于邪恶的RegEx,使用([-]?d*.?d+)
而不是([-]?(d*.)?d+)
是潜在的危险。但是如果我加上这些额外的括号,我就有了一个额外的组。这将导致Split()
将类似123.456miles
的内容分割成包含元素
{emptystr, 123.456, 123., miles}
这样,我不能确定单元,在本例中miles
,将在val_arr[2]
中,这是一个问题。
我在这个。net RegEx测试器上测试了这个。我也试图打破我的RegEx模式,([-]?d*.?d+)
,但它似乎很好,"邪恶的RegEx安全"。所以我不确定我是否应该坚持我目前所做的,或者找到一个更优雅的解决方案,如果有的话。
不是很优雅,但是您不能只查找字符串中的第一个字母来知道单元开始的位置吗?
static void SplitValAndUnit(string unsplitData)
{
for (int x = 0; x < unsplitData.Length; x++)
{
if (Char.IsLetter(unsplitData[x]))
{
string value = unsplitData.Substring(0, x);
// TryParse value to whatever data type
string unit = unsplitData.Substring(x, unsplitData.Length - x);
}
}
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- 以代数表达式中的数字和单位作为自变量的文字
- 以C++为单位计算数组中的重复数字
- put_time具有转换说明符,该转换指定符,该指定符在一个月的单个数字上输出没有前面字符的单位天数
- 您是否有函数(不是随机)来查找随机骰子(从 1 到 6)数字(以 C++ 为单位)
- 查找向量中数字的出现次数(以C++为单位)
- 以毫秒为单位的时间戳给了我 10 位C++数字
- 从输入中获取一个数字和一个单位作为双精度和字符串——编程:使用c++的原则和实践
- c#中分隔字符串中的数字和单位