Como converter / analisar de String para char em java?


199

Como analiso um Stringvalor para um chartipo, em Java?

Eu sei como fazer isso para int e double (por exemplo Integer.parseInt("123")). Existe uma aula para Strings e Chars?


Deseja analisar uma String em uma matriz de caracteres? Por favor seja mais específico.
Zsombor Erdődy-Nagy


1
Sim, mas eu não vejo nenhum método nele que me ajude a alterar uma String como "a" para um caractere como 'a'
Yokhen

5
Eu não acho que é uma duplicata. Estou tentando apenas converter uma única letra.
Yokhen 21/10

Respostas:


295

Se sua string contém exatamente um caractere, a maneira mais simples de convertê-la em um caractere é provavelmente chamar o charAtmétodo:

char c = s.charAt(0);

1
Para mais de um caractere: char [] c = s.toCharArray ();

67

Você pode usar a função .charAt (int) com Strings para recuperar o valor de char em qualquer índice. Se você deseja converter a String em uma matriz de caracteres, tente chamar .toCharArray () na String.

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

Bem, é verdade, embora eu estivesse tentando converter um único caractere em uma string, acho que poderia funcionar também.
Yokhen 21/10

48

você pode usar este truque:

String s = "p";

char c = s.charAt(0);

Mas isso vai se transformar "123"em '1', é que o que você está depois?
aioobe

1
Eu não pretendia usar especificamente "123". Eu estava apenas usando como exemplo. Para char, seria um exemplo diferente como "p", pois um char é um caractere único, não vários.
Yokhen 21/10

1
a função ToCharArray () retorna uma matriz de caracteres no caso de você querer dividir o string em caracteres
Genjuro

8

Se a string tiver 1 caractere, pegue esse caractere . Se a cadeia não tiver 1 caractere, ela não poderá ser analisada em um caractere.


Talvez um hack, mas pode ser feito. Consulte stackoverflow.com/questions/21813888/build-char-from-string
Damo

Sua declaração dizendo que uma string com mais de um caractere não pode ser analisada para um número inteiro está errada, veja minha resposta.
Adam Martinu

@ Adam: Sua resposta está errada, vou explicar em um comentário.
Vlad

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

 }

ou Se você quiser individualmente, poderá

char ch = string.charAt(1);


4

A maneira mais simples de converter um Stringem um charé 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

Aqui está um 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

Talvez eu esteja um pouco atrasado, mas achei útil, entenda cadena como String e deixe o título da coluna como Converter em. :-)

ATUALIZAÇÃO: Então, finalmente recebi de volta a minha senha, atualizei com texto copiável para que outras pessoas possam copiar e colar como sempre, e para outras que possam obter a indexação dos dados (se houver). :-) Feliz bigode de novembro.

Tabela de conversão

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
Por que polegares para baixo? Isso realmente responder à pergunta, assim como você pode verificar como analisar em outros tipos
Davide

4
@Davide Provavelmente porque as postagens não devem incluir as informações importantes como imagem quando podem ser postadas como texto. As imagens não podem ser pesquisadas e copiadas / coladas, geralmente são bloqueadas e não podem ser lidas por usuários que dependem de leitores de tela.
Modus Tollens

Por favor edite seu post e mostrar o texto real em vez de screenshots. Outros não podem copiar e colar de suas imagens. Veja aqui para detalhes. Obrigado.
Pang

2
Eu concordo com a pergunta @Davide - "Por que curtir?". Acredito que isso fará com que o usuário que conseguiu isso não contribua com o stackoverflow no futuro e acredito que esse não deve ser o caso. Na minha perspectiva, "polegares para baixo" nunca devem ser usados! É negativo em sua essência e não traz nenhum valor.
Marco Marco

Tem certeza de que char --> StringGoesHere.parseFloat(int position);está correto? Honestamente, não verifiquei, mas tenho Stringquase certeza de que não tem um parseFloatmétodo e, mesmo que exista, não vejo por que isso seria o que você estaria tentando fazer lá.
BeUndead 18/03/19

3

Se você deseja analisar uma String em um caractere, enquanto o objeto String representa mais de um caractere, basta usar a seguinte expressão: char c = (char) Integer.parseInt (s) . Onde s é igual à String que você deseja analisar. A maioria das pessoas esquece que os caracteres representam um número de 16 bits e, portanto, podem fazer parte de qualquer expressão numérica :)


1
Isto está errado. Analisar uma string em um número significa que o número foi convertido em uma string e queremos recuperar o número. Exatamente da mesma maneira, analisar um caractere de uma sequência de caracteres significa que o caractere foi convertido em uma sequência de caracteres e queremos que o caractere volte. Usar um número intermediário não é o que o OP perguntou.
Vlad

@ Vlad Ele pediu um número, porque é isso que charé, assim como inte double. Ele até deu o exemplo String"123". e quem disse que você não pode converter a charpara a Stringcom um comprimento maior que um e vice-versa? Tente você mesmo com char c = 123: String.valueOf((int) c).equals("123")retorna true.
Adam Martinu

1
Desculpe, mas tudo se resume aos números, esse não é o ponto da questão. Você pode dar uma olhada na resposta aceita, que claramente exclui um intermediário int. Para o seu exemplo, você precisava converter para int, o que significa que você está trabalhando não com o original char, mas com um int, que de alguma forma corresponde ao 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));
        }
    }
}

Por favor, adicione algumas explicações à sua resposta.
André Kool

1

Você pode fazer o seguinte:

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

Você pode encurtar a um onelinerString str = "abc"; char[] char_str = str.toCharArray();
abhyudayasrinet

1

Você pode simplesmente usar o toCharArray()para converter uma string em array de caracteres:

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

0

Uma maneira de ensaio:

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 Saída, consulte este link: Clique aqui

Obrigado :-)


0

Você pode usar a função .charAt (int) com Strings para recuperar o valor de char em qualquer índice. Se você deseja converter a String em uma matriz de caracteres, tente chamar .toCharArray () na String. Se a seqüência de caracteres tiver 1 caractere, pegue esse caractere chamando .charAt (0) (ou .First () em C #).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.