¿Cómo convertir / analizar de String a char en Java?


199

¿Cómo analizo un Stringvalor a un chartipo, en Java?

Sé cómo hacerlo con int y double (por ejemplo Integer.parseInt("123")). ¿Hay una clase para cadenas y caracteres?


¿Quieres analizar una cadena en una matriz de caracteres? Por favor sé más específico.
Zsombor Erdődy-Nagy


1
Sí, pero no veo ningún método que me ayude a cambiar una Cadena como "a" a una char como 'a'
Yokhen 21/10/11

55
No creo que sea un duplicado. Estoy tratando de convertir una sola letra.
Yokhen

Respuestas:


295

Si su cadena contiene exactamente un carácter, la forma más sencilla de convertirlo en un carácter es llamar al charAtmétodo:

char c = s.charAt(0);

1
Para más de un carácter: char [] c = s.toCharArray ();

67

Puede usar la función .charAt (int) con Strings para recuperar el valor char en cualquier índice. Si desea convertir la cadena en una matriz de caracteres, intente llamar a .toCharArray () en la cadena.

String g = "line";
char c = g.charAt(0);  // returns 'l'
char[] c_arr = g.toCharArray(); // returns a length 4 char array ['l','i','n','e']

Bueno, es cierto, aunque estaba tratando de convertir un solo carácter en una cadena, supongo que eso también podría funcionar.
Yokhen

48

puedes usar este truco:

String s = "p";

char c = s.charAt(0);

Pero eso se convertirá "123"en '1', ¿eso es lo que buscas?
aioobe

1
No quise usar específicamente "123". Solo estaba usando como ejemplo. Para char sería un ejemplo diferente como "p" ya que un char es un solo personaje, no múltiples.
Yokhen

1
la función toCharArray () devuelve una serie de caracteres en caso de que desee dividir su cadena en caracteres
Genjuro


5
 String string = "This is Yasir Shabbir ";
 for(char ch : string.toCharArray()){

 }

o si lo desea individualmente, entonces puede como

char ch = string.charAt(1);


4

La forma más sencilla de convertir Stringa a chares usando charAt():

String stringAns="hello";
char charAns=stringAns.charAt(0);//Gives You 'h'
char charAns=stringAns.charAt(1);//Gives You 'e'
char charAns=stringAns.charAt(2);//Gives You 'l'
char charAns=stringAns.charAt(3);//Gives You 'l'
char charAns=stringAns.charAt(4);//Gives You 'o'
char charAns=stringAns.charAt(5);//Gives You:: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5

Aquí hay un script completo:

import java.util.Scanner;

class demo {
    String accNo,name,fatherName,motherName;
    int age;
    static double rate=0.25;
    static double balance=1000;
    Scanner scanString=new Scanner(System.in);
    Scanner scanNum=new Scanner(System.in);

    void input()
    {
        System.out.print("Account Number:");
        accNo=scanString.nextLine();
        System.out.print("Name:");
        name=scanString.nextLine();
        System.out.print("Father's Name:");
        fatherName=scanString.nextLine();
        System.out.print("Mother's Name:");
        motherName=scanString.nextLine();
        System.out.print("Age:");
        age=scanNum.nextInt();
        System.out.println();
    }

    void withdraw() {
        System.out.print("How Much:");
        double withdraw=scanNum.nextDouble();
        balance=balance-withdraw;
        if(balance<1000)
        {
            System.out.println("Invalid Data Entry\n Balance below Rs 1000 not allowed");
            System.exit(0);
        }       
    }

    void deposit() {
        System.out.print("How Much:");
        double deposit=scanNum.nextDouble();
        balance=balance+deposit;
    }

    void display() {
        System.out.println("Your  Balnce:Rs "+balance);
    }

    void oneYear() {
        System.out.println("After one year:");
        balance+=balance*rate*0.01;
    }

    public static void main(String args[]) {
        demo d1=new demo();
        d1.input();
        d1.display();
        while(true) {//Withdraw/Deposit
            System.out.println("Withdraw/Deposit Press W/D:");
            String reply1= ((d1.scanString.nextLine()).toLowerCase()).trim();
            char reply=reply1.charAt(0);
            if(reply=='w') {
                d1.withdraw();
            }
            else if(reply=='d') {
                d1.deposit();
            }
            else {
                System.out.println("Invalid Entry");
            }
            //More Manipulation 
            System.out.println("Want More Manipulations: Y/N:");
            String manipulation1= ((d1.scanString.nextLine()).toLowerCase()).trim();

            char manipulation=manipulation1.charAt(0);
            System.out.println(manipulation);

            if(manipulation=='y') { }
            else if(manipulation=='n') {
                break;
            }
            else {
                System.out.println("Invalid Entry");
                break;
            }
        }   

        d1.oneYear();
        d1.display();   
    }
}

4

Puede que llegue un poco tarde, pero me pareció útil, entiendo cadena como String, y el título de la columna izquierda como Convertir a. :-)

ACTUALIZACIÓN: Entonces, finalmente recuperé mi contraseña, actualicé con texto copiable para que otros puedan simplemente copiar y pegar como siempre, y para otros que puedan obtener la indexación de los datos (si lo hace). :-) Feliz noviembre bigote.

Tabla de conversión

double  --> Double.parseDouble(String);
float   --> Float.parseFloat(String);
long    --> Long.parseLong(String);
int     --> Integer.parseInt(String);
char    --> stringGoesHere.charAt(int position);
short   --> Short.parseShort(String);
byte    --> Byte.parseByte(String);
boolean --> Boolean.parseBoolean(String);

44
¿Por qué pulgares abajo? Esto realmente responde la pregunta, por lo que puede verificar cómo analizar en otros tipos
Davide,

44
@Davide Probablemente porque las publicaciones no deben incluir la información importante como imagen cuando se puede publicar como texto. Las imágenes no se pueden buscar y copiar / pegar, a menudo están bloqueadas y no pueden ser leídas por usuarios que confían en lectores de pantalla.
Modus Tollens

Por favor, editar tu post y mostrar el texto real en lugar de las capturas. Otros no pueden copiar y pegar de sus imágenes. Ver aquí para más detalles. Gracias.
Pang

2
Estoy de acuerdo con la pregunta de @Davide: "¿Por qué rechazar?". Creo que esto hará que el usuario que obtuvo esto no contribuya con stackoverflow en el futuro y creo que este no debería ser el caso. ¡Desde mi punto de vista, "no me gusta" nunca debería usarse! Es negativo en su esencia y no aporta ningún valor en absoluto.
Marco

¿Estás seguro de que char --> StringGoesHere.parseFloat(int position);es correcto? Honestamente, no lo he verificado, pero estoy bastante seguro de Stringque no tiene un parseFloatmétodo, e incluso si lo tiene, no puedo ver por qué eso sería lo que intentaría hacer allí.
BeUndead

3

Si desea analizar una Cadena a un carácter, mientras que el objeto Cadena representa más de un carácter, simplemente use la siguiente expresión: char c = (char) Integer.parseInt (s) . Donde s es igual a la cadena que desea analizar. La mayoría de las personas olvidan que los caracteres representan un número de 16 bits y, por lo tanto, pueden ser parte de cualquier expresión numérica :)


1
Esto está mal. Analizar una cadena en un número significa que el número se convirtió en una cadena y queremos recuperar el número. Exactamente de la misma manera, analizar un carácter de una cadena significa que el carácter se convirtió en una cadena y queremos que vuelva el carácter. El uso de un número intermedio no es lo que preguntó el OP.
Vlad

@Vlad Él pidió un número, porque eso es lo que chares, igual que inty double. Incluso dio el ejemplo String"123". ¿Y quién dice que no puede convertir un chara a Stringcon una longitud mayor que uno y viceversa? Pruébelo usted mismo con char c = 123: String.valueOf((int) c).equals("123")devoluciones true.
Adam Martinu

1
Lo siento, pero todo se reduce a los números, ese no es el punto de la pregunta. Puede echar un vistazo a la respuesta aceptada, que excluye claramente un intermedio int. Por su ejemplo, lo necesario para fundición a int, lo que significa que usted no está trabajando con el original char, pero con una int, que resulta corresponde de alguna manera a la original char.
Vlad

2
import java.io.*;
class ss1 
{
    public static void main(String args[]) 
    {
        String a = new String("sample");
        System.out.println("Result: ");
        for(int i=0;i<a.length();i++)
        {
            System.out.println(a.charAt(i));
        }
    }
}

Agregue un poco de explicación a su respuesta.
André Kool

1

Puedes hacer lo siguiente:

String str = "abcd";
char arr[] = new char[len]; // len is the length of the array
arr = str.toCharArray();

Puede acortar esto a una línea de tiempoString str = "abc"; char[] char_str = str.toCharArray();
abhyudayasrinet

1

Simplemente puede usar toCharArray()para convertir una cadena a una matriz de caracteres:

    Scanner s=new Scanner(System.in);
    System.out.print("Enter some String:");
    String str=s.nextLine();
    char a[]=str.toCharArray();

0

Una forma de ensayo:

public class CharToInt{  
public static void main(String[] poo){  
String ss="toyota";
for(int i=0;i<ss.length();i++)
  {
     char c = ss.charAt(i); 
    // int a=c;  
     System.out.println(c); } } 
} 

Para la salida, vea este enlace: haga clic aquí

Gracias :-)


0

Puede usar la función .charAt (int) con Strings para recuperar el valor char en cualquier índice. Si desea convertir la cadena en una matriz de caracteres, intente llamar a .toCharArray () en la cadena. Si la cadena tiene 1 carácter, simplemente tome ese carácter llamando a .charAt (0) (o .First () en C #).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.