Comment convertir / analyser de String en Char en Java?


199

Comment analyser une Stringvaleur en unchar type, en Java?

Je sais comment le faire en int et en double (par exemple Integer.parseInt("123")). Y a-t-il une classe pour les cordes et les caractères?


Vous souhaitez analyser une chaîne dans un tableau de caractères? Veuillez être plus précis.
Zsombor Erdődy-Nagy


1
Oui, mais je ne vois aucune méthode qui pourrait m'aider à changer une chaîne telle que "a" en un caractère tel que 'a'
Yokhen

5
Je ne pense pas que ce soit un doublon. J'essaie de convertir une seule lettre.
Yokhen

Réponses:


295

Si votre chaîne contient exactement un caractère, la façon la plus simple de la convertir en caractère est probablement d'appeler la charAtméthode:

char c = s.charAt(0);

1
Pour plus d'un caractère: char [] c = s.toCharArray ();

67

Vous pouvez utiliser la fonction .charAt (int) avec Strings pour récupérer la valeur char à n'importe quel index. Si vous souhaitez convertir la chaîne en un tableau de caractères, essayez d'appeler .toCharArray () sur la chaîne.

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']

Eh bien, c'est vrai, même si je cherchais à convertir un seul caractère dans une chaîne, je suppose que cela pourrait aussi fonctionner.
Yokhen

48

vous pouvez utiliser cette astuce:

String s = "p";

char c = s.charAt(0);

Mais cela se transformera "123"en '1', est que ce que vous êtes après?
aioobe

1
Je ne voulais pas utiliser spécifiquement "123". J'utilisais juste comme exemple. Pour char, ce serait un exemple différent comme "p" car un char est un seul caractère, pas plusieurs.
Yokhen

1
la fonction toCharArray () renvoie un tableau de caractères au cas où vous voudriez diviser votre chaîne en caractères
Genjuro

8

Si la chaîne comporte 1 caractère, prenez simplement ce caractère . Si la chaîne ne comporte pas 1 caractère, elle ne peut pas être analysée en un caractère.


Peut-être un hack, mais peut être fait. Voir stackoverflow.com/questions/21813888/build-char-from-string
Damo

Votre déclaration disant qu'une chaîne de plus de 1 caractère ne peut pas être analysée en un entier est incorrecte, voir ma réponse.
Adam Martinu

@Adam: Votre réponse est fausse, je vais vous l'expliquer dans un commentaire.
Vlad

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

 }

ou si vous voulez individuellement, vous pouvez

char ch = string.charAt(1);


4

La façon la plus simple de convertir un Stringen un charconsiste à utiliser 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

Voici un script complet:

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

Je suis peut-être un peu en retard mais j'ai trouvé cela utile, comprenez cadena comme String et le titre de la colonne de gauche comme Convert to. :-)

MISE À JOUR: Donc, j'ai finalement récupéré mon mot de passe, j'ai mis à jour avec du texte copiable afin que d'autres puissent simplement copier et coller comme toujours, et pour d'autres qui peuvent obtenir l'indexation des données (si c'est le cas). :-) Joyeuse moustache de novembre.

Table de conversion

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);

4
Pourquoi le pouce vers le bas? Cela répond vraiment à la question, afin que vous puissiez vérifier comment analyser dans d'autres types
Davide

4
@Davide Probablement parce que les publications ne doivent pas inclure les informations importantes sous forme d'image lorsqu'elles peuvent être publiées sous forme de texte. Les images ne peuvent pas être recherchées et copiées / collées, sont souvent bloquées et ne peuvent pas être lues par les utilisateurs utilisant des lecteurs d'écran.
Modus Tollens

Veuillez modifier votre message et afficher le texte réel au lieu de captures d'écran. D'autres ne peuvent pas copier et coller à partir de vos images. Voir ici pour plus de détails. Je vous remercie.
Pang

2
Je suis d'accord avec la question @Davide - "Pourquoi le pouce vers le bas?". Je pense que cela empêchera l'utilisateur qui l'a obtenu de contribuer à stackoverflow à l'avenir et je pense que cela ne devrait pas être le cas. De mon point de vue, le pouce vers le bas ne devrait jamais être utilisé! Il est négatif dans son essence et n'apporte aucune valeur.
Marco

Etes-vous sûr que char --> StringGoesHere.parseFloat(int position);c'est correct? Honnêtement, je n'ai pas vérifié, mais je suis assez sûr qu'il Stringn'y a pas de parseFloatméthode, et même si c'est le cas, je ne vois pas pourquoi ce serait ce que vous essayez de faire là-bas.
BeUndead

3

Si vous souhaitez analyser une chaîne en un caractère, alors que l'objet chaîne représente plusieurs caractères, vous utilisez simplement l'expression suivante: char c = (char) Integer.parseInt (s) . Où s est égal à la chaîne que vous souhaitez analyser. La plupart des gens oublient que les caractères représentent un nombre de 16 bits et peuvent donc faire partie de n'importe quelle expression numérique :)


1
C'est faux. L'analyse d'une chaîne en un nombre signifie que le nombre a été converti en chaîne, et nous voulons récupérer le nombre. Exactement de la même manière, l'analyse d'un caractère à partir d'une chaîne signifie que le caractère a été converti en chaîne, et nous voulons que le caractère revienne. L'utilisation d'un numéro intermédiaire n'est pas ce que le PO a demandé.
Vlad

@Vlad Il a demandé un numéro, car c'est ce qu'est un char, tout comme intet double. Il a même donné l'exemple String"123". et qui dit que vous ne pouvez pas convertir un charen un Stringavec une longueur supérieure à un, et inversement? Essayez-le vous-même avec char c = 123: String.valueOf((int) c).equals("123")retours true.
Adam Martinu

1
Désolé, mais tout se résume aux chiffres, ce n'est pas le but de la question. Vous pouvez consulter la réponse acceptée, qui exclut clairement un intermédiaire int. Pour votre exemple, vous devez effectuer une conversion vers int, ce qui signifie que vous travaillez non pas avec l'original char, mais avec un int, qui correspond en quelque sorte à l'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));
        }
    }
}

Veuillez ajouter une explication à votre réponse.
André Kool

1

Vous pouvez effectuer les opérations suivantes:

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

Vous pouvez le raccourcir en un String str = "abc"; char[] char_str = str.toCharArray();
oneliner

1

Vous pouvez simplement utiliser le toCharArray()pour convertir une chaîne en tableau de caractères:

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

0

Une façon d'essayer:

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); } } 
} 

Pour la sortie, voir ce lien: Cliquez ici

Merci :-)


0

Vous pouvez utiliser la fonction .charAt (int) avec Strings pour récupérer la valeur char à n'importe quel index. Si vous souhaitez convertir la chaîne en un tableau de caractères, essayez d'appeler .toCharArray () sur la chaîne. Si la chaîne contient 1 caractère, prenez simplement ce caractère en appelant .charAt (0) (ou .First () en C #).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.