在C#中是否有与JavaScript parseInt等价的语言?
我想知道是否有人组装了一些东西,或者看到了一些与C#的JavaScript parseInt等价的东西 具体来说,我希望使用如下字符串:在C#中是否有与JavaScript parseInt等价的语言?,c#,javascript,integer,parseint,C#,Javascript,Integer,Parseint,我想知道是否有人组装了一些东西,或者看到了一些与C#的JavaScript parseInt等价的东西 具体来说,我希望使用如下字符串: 123abc4567890 并仅返回第一个有效整数 123 我使用了一个静态方法,只返回数字: public static int ParseInteger( object oItem ) { string sItem = oItem.ToString(); sItem = Regex.Replace( sItem
123abc4567890
并仅返回第一个有效整数
123
我使用了一个静态方法,只返回数字:
public static int ParseInteger( object oItem )
{
string sItem = oItem.ToString();
sItem = Regex.Replace( sItem, @"([^\d])*", "" );
int iItem = 0;
Int32.TryParse( sItem, out iItem );
return iItem;
}
上述工作需要:
ParseInteger( "123abc4567890" );
还给我
1234567890
我不确定是否可以使用正则表达式,或者是否有更好的方法仅从字符串中获取第一个整数。您很接近了
你可能只是想:
foreach (Match match in Regex.Matches(input, @"^\d+"))
{
return int.Parse(match.Value);
}
这里有一个完整的例子。如果您没有给它一个有效的字符串,它将抛出一个异常-您可以通过在
ParseInteger
中不显式地抛出异常,而是使用int.TryParse
来更改此行为
请注意,它也允许前导符号,但不允许前导+符号。(同样,很容易改变。)
还要注意的是,尽管我有三个成功情况的测试用例,但我没有失败的测试用例
最后,它将不匹配“abc123def”。如果需要,请从正则表达式中删除^
using System;
using System.Text;
using System.Text.RegularExpressions;
class Test
{
static void Main(string[] args)
{
Check("1234abc", 1234);
Check("-12", -12);
Check("123abc456", 123);
}
static void Check(string text, int expected)
{
int actual = ParseInteger(text);
if (actual != expected)
{
Console.WriteLine("Expected {0}; got {1}", expected, actual);
}
}
private static readonly Regex LeadingInteger = new Regex(@"^(-?\d+)");
static int ParseInteger(string item)
{
Match match = LeadingInteger.Match(item);
if (!match.Success)
{
throw new ArgumentException("Not an integer");
}
return int.Parse(match.Value);
}
}
可以使用此正则表达式(“\A\d+”)在字符串开头查找数字
然后,您可以使用int.Parse()将该字符串转换为实际整数。对Jon Skeet的优秀解决方案稍加修改即可
public static int ParseInteger( object oItem )
{
int iItem = 0;
if (oItem != null) {
Int32.TryParse( Regex.Match( oItem.ToString(), @"\d+" ).Value, out iItem );
}
return iItem;
}
我会将正则表达式更改为(如Jon所述):
@“^([^\d]+)?(+|-)?\d+”
这允许在第一次出现数字之前出现前导字符的情况(例如,
asb12354
->12354
)和两种带符号整数情况(例如,+
或-
)您不必编写自己的int解析函数
我知道这根线很旧了。但有一些简单的方法可以做到这一点:
int.Parse(urString);
use short.Parse(urString); //if you want a short
或:
//根据您的情况使用以下选项:
Convert.ToInt16();
Convert.ToInt32();
Convert.ToInt64();
注:我在回答您的主题问题“C#中是否有与JavaScript parseInt等价的语言?”时,只是给您一些想法,而不是为您编写代码。您需要首先对“字母字符”进行筛选,您可以使用正则表达式或简单字符串进行筛选。替换,或由您决定 那会把ab12cd转换成12,不是吗?这很可能是人们想要的行为——我不确定。我之所以这么问,是因为我的版本只有在数字位于字符串开头时才有效。啊,你是对的,重新开始时的a^可能足够好了:)谢谢,我不是说这是必需的,因为你的实现行为可能是可取的,我想检查:)不能在该foreach中使用var,因为Regex.Matches返回的MatchCollection是非泛型ICollection。碰巧我昨天在博客上写了这个:谢谢你的回答,他们都很有帮助。我将leppie's标记为已被接受,因为它是第一个,而且确实有效。我拿了他的,带着它跑了起来,做了一些修改。乔恩·斯基特的绝对是最完整的。再次感谢!你能告诉我,你的、被接受的和我的在运行时/性能上有什么不同吗?内部正则表达式是否完全按照我发布的方式工作?您必须对其进行基准测试以了解性能。我不知道.NET正则表达式是如何实现的。不过,这取决于选项——在这种情况下,我没有指定它应该被编译,这可能会在编译的初始命中后提高性能。当您编写基准测试套件时:您是否可以在空闲时间为我运行此测试?恐怕基准测试套件仍在开发中。随着第二版《C#in Depth》的修订,我现在真的没有时间做这件事。抱歉:(啊……没关系……等我有时间的时候,我会自己看一看的!鉴于示例字符串“123abc4567890”,所有这些都会失败,因此需要一些自定义的东西。我在回答你的主题问题“C#中是否有与JavaScript parseInt等价的东西?”,只是给您一些想法,而不是为您编写代码。您需要首先对“字母字符”进行筛选,您可以使用正则表达式或简单字符串进行筛选。替换,或由您决定。
int nr = Int32.Parse(yourstring);