2009-08-20 30 views
9

Duplicar posible:
how can I convert String to Int ?convierte una cadena a un entero

Hola,

tengo el siguiente problema de la conversión de cadena a un entero:

string str = line.Substring(0,1); 

//This picks an integer at offset 0 from string 'line' 

Así que ahora cuerda str contiene un solo entero en él. Estoy haciendo lo siguiente:

int i = Convert.ToInt32(str); 

debería estar imprimiendo un número entero si escribo la siguiente declaración, ¿verdad?

Console.WriteLine(i); 

Se compila sin ningún error, pero da el siguiente error en tiempo de ejecución:

Una excepción no controlada del tipo 'System.FormatException' en mscorlib.dll

Información adicional: cadena de entrada no en un formato correcto.

¿Alguna ayuda, por favor?

+0

Etiquete esto con el idioma que está utilizando. – sal

+0

Si puede proporcionar el valor de cadena dentro de la variable de línea, podría ser mucho más fácil detectar el error. – rahul

+0

Este es un duplicado muchas veces, por favor ver http://stackoverflow.com/questions/1019793/how-can-i-convert-string-to-int, http://stackoverflow.com/questions/952469/convert -string-to-int, http://stackoverflow.com/questions/887586/convert-string-to-int. –

Respuesta

18

En lugar de utilizar Convert.ToInt32(string) debe considerar el uso Int32.TryParse(string, out int) lugar. Los métodos TryParse están ahí para ayudar a manejar la entrada proporcionada por el usuario de una manera más segura. La causa más probable de su error es que la subcadena que está devolviendo tiene una representación de cadena no válida de un valor entero.

string str = line.Substring(0,1); 
int i = -1; 
if (Int32.TryParse(str, out i)) 
{ 
    Console.WriteLine(i); 
} 
+0

gracias por la pieza de code..I intentarán que el día de mañana, ya que no tengo acceso a mi estación de trabajo correcta now..will actualizar la salida aquí tomorrow..whatever puede be..thanks nuevo – zack

+0

¿Cuál es la razón para establecer i a -1 en el ejemplo proporcionado? Se me hace pensar que después de un análisis sintáctico no se podía probar la -1 de alguna manera, pero TryParse establece i a 0 si el análisis sintáctico no –

0

Es muy posible que hay algunos espacios en blanco en ese país. Intente ejecutar algo similar a trim() (no estoy seguro de en qué idioma se encuentra) que eliminará el espacio en blanco. Además, intente imprimir la cadena para asegurarse de que realmente tiene la parte correcta de la misma. Todos hemos hecho eso :)

+0

Bueno, cuando la cadena de salida en la consola usando Console.WriteLine (str) imprime un símbolo (un smiley básicamente) y desde Doy la cuenta como 1 Creo que no puede haber ningún otro carácter excepto para el número entero (que se está imprimiendo como una carita sonriente). Estoy usando C# en Visual Studio 2005 por cierto. – zack

+1

Si la consola no puede imprimirlo como un entero, entonces supongo que no es un número entero. Podría estar equivocado aquí, pero mi comprensión de este método es convertir una representación de cadena de un entero, digamos "1234" en la representación de tipo de datos enteros de 1234, por ejemplo, algo con lo que podría hacer cálculos matemáticos. ¿Es eso lo que intentas hacer? –

1

FormatException

valor no consiste en un signo opcional seguido por una secuencia de dígitos (0 a 9).

La excepción que se produce cuando el formato de un argumento no cumple con las especificaciones de los parámetros del método invocado .

Puede usar Int32.TryParse si no desea generar una excepción como esta.

Int32.TryParse: Convierte la representación de cadena de un número a sus 32 bits entero de equivalente. Un valor de retorno indica si la operación fue exitosa.

0

Es probable que su entrada es no un formato válido. Prueba esto en su lugar. Si el número no es válido, debería generar un error.

Tenga en cuenta que la cadena debe consistir en un signo opcional seguido de un número.

string line = "23"; // or whatever. 
string str = line.Substring(0,1); 
int i = 0; 
if (Int32.TryParse(str, out i)) { 
    Console.WriteLine(i); 
} else { 
    Console.WriteLine ("Error converting '" + line + "', '" + str + "'."); 
} 

Una cosa se le puede ver es el usuario que entra "-1" por ejemplo. Si haces el substring(0,1) en eso, solo obtendrás "-" que no es realmente válido.

0

¿Seguro que el valor devuelto en str es un int, establece un punto de depuración si el uso de Visual Studio. Tengo la sensación de que tal vez su problema no sea el de devolver un número entero. Pruebe:

line.Trim().Substring(0,1); 

Esto eliminará cualquier espacio en blanco.

+0

Trim() sólo eliminar los espacios en blanco del final y principio de la cadena, así que esto no es garantizado para resolver el problema dependiendo de lo que contiene la cadena original. –

+0

Sí, pero como la subcadena es (0, 1), esto siempre será el principio y posible el final. – StarSignLeo

Cuestiones relacionadas