unity - ¿Hay un equivalente al parseInt de JavaScript en C#?
parseint typescript (7)
Aquí hay un ejemplo completo. Lanzará una excepción si no le da una cadena válida: puede cambiar este comportamiento al no lanzar una excepción de forma explícita en ParseInteger
y usar int.TryParse
en int.TryParse
lugar.
Tenga en cuenta que también permite una señal de inicio, pero no una ventaja +. (Nuevamente, fácil de cambiar)
También tenga en cuenta que aunque tengo tres casos de prueba para situaciones de éxito, no tengo ningún caso de prueba por falla.
Finalmente, no coincidirá con "abc123def". Si lo desea, elimine ^ de la expresión regular.
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);
}
}
Me preguntaba si alguien había armado algo o si había visto algo equivalente al parseInt de JavaScript para C #.
Específicamente, estoy buscando tomar una cadena como:
123abc4567890
y devuelve solo el primer entero válido
123
Tengo un método estático que he usado que devolverá solo los números:
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;
}
Lo anterior tomaría:
ParseInteger( "123abc4567890" );
y devuélveme
1234567890
No estoy seguro de si es posible hacerlo con una expresión regular, o si hay un método mejor para obtener solo el primer entero de la cadena.
Estás cerca.
Probablemente solo quieras:
foreach (Match match in Regex.Matches(input, @"^/d+"))
{
return int.Parse(match.Value);
}
NO tienes que escribir tu propia función int parse !!!!
Sé que este hilo es bastante viejo. pero hay alguna forma simple de hacer esto:
int.Parse(urString);
use short.Parse(urString); //if you want a short
O: // usa esos dependen de tu situación:
Convert.ToInt16();
Convert.ToInt32();
Convert.ToInt64();
NOTA:
Estoy respondiendo su pregunta del tema "¿Hay un equivalente al parseInt de JavaScript en C #?", Simplemente déle una idea, NO escriba su código para usted. Primero debe filtrar en ''Caracteres alfabéticos'', puede hacerlo con Expresión regular o una cadena simple. Reemplace, o depende de usted.
Puede usar este RegEx ("/ A / d +") para buscar números al principio de una cadena.
Luego puede usar int.Parse () para convertir esa cadena en un entero real.
Un ligero cambio en la excelente solución de Jon Skeet está en orden.
Cambiaría la expresión regular a (como lo menciona Jon):
@"^([^/d]+)?(+|-)?/d+"
Esto permite el caso de caracteres iniciales antes de la primera aparición de un dígito
(por ejemplo, asb12354
-> 12354
) y ambos casos enteros con signo (por ejemplo, +
o -
)
public static int ParseInteger( object oItem )
{
int iItem = 0;
if (oItem != null) {
Int32.TryParse( Regex.Match( oItem.ToString(), @"/d+" ).Value, out iItem );
}
return iItem;
}
int nr = Int32.Parse(yourstring);