Jak przekonwertować / parsować z String na char w java?

199

Jak parsować Stringwartość na chartyp w Javie?

Wiem jak to zrobić int i double (na przykład Integer.parseInt("123")). Czy istnieje klasa dla ciągów znaków i znaków?

Jokhen
źródło
Chcesz przeanalizować ciąg znaków w tablicy znaków? Proszę być bardziej precyzyjnym.
Zsombor Erdődy-Nagy
1
Tak, ale nie widzę w tym żadnej metody, która pomogłaby mi zmienić ciąg
znaków,
5
Nie sądzę, że to duplikat. Próbuję przekonwertować tylko jedną literę.
Jokhen

Odpowiedzi:

295

Jeśli łańcuch zawiera dokładnie jeden znak, najprostszym sposobem na konwersję go na znak jest prawdopodobnie wywołanie charAtmetody:

char c = s.charAt(0);
Mark Byers
źródło
1
Dla więcej niż jednego znaku: char [] c = s.toCharArray ();
67

Możesz użyć funkcji .charAt (int) z napisami, aby pobrać wartość char w dowolnym indeksie. Jeśli chcesz przekonwertować String na tablicę char, spróbuj wywołać .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']
Gaʀʀʏ
źródło
Cóż, prawda, chociaż starałem się przekonwertować pojedynczy znak w ciągu, myślę, że to też może zadziałać.
Jokhen
48

możesz użyć tej sztuczki:

String s = "p";

char c = s.charAt(0);
Genjuro
źródło
Ale to okaże "123"się '1', że to, co jesteś po?
aioobe
1
Nie chciałem specjalnie używać „123”. Użyłem tylko jako przykładu. Dla char byłby to inny przykład jak „p”, ponieważ char jest pojedynczym znakiem, a nie wieloma.
Jokhen
1
funkcja toCharArray () zwraca tablicę znaków na wypadek, gdybyś chciał podzielić swój ciąg znaków na znaki
Genjuro
8

Jeśli ciąg ma 1 znak, po prostu weź ten znak . Jeśli łańcuch nie ma długości 1 znaku, nie można go parsować w znak.

Vlad
źródło
Może hack, ale można to zrobić. Zobacz stackoverflow.com/questions/21813888/build-char-from-string
Damo
Twoje stwierdzenie, że ciąg dłuższy niż 1 znak nie może zostać przeanalizowany jako liczba całkowita, jest niepoprawne, patrz moja odpowiedź.
Adam Martinu,
@Adam: Twoja odpowiedź jest zła, wyjaśnię to w komentarzu.
Vlad
5
 String string = "This is Yasir Shabbir ";
 for(char ch : string.toCharArray()){

 }

lub Jeśli chcesz indywidualnie, możesz jako

char ch = string.charAt(1);
Yasir Shabbir Choudhary
źródło
4

Najprostszym sposobem konwersji Stringna a charjest użycie 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

Oto pełny skrypt:

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();   
    }
}
Inżynier Isabella
źródło
4

Mogę być trochę spóźniony, ale uznałem to za przydatne, rozumiem kadencję jako Ciąg, a tytuł lewej kolumny jako Konwertuj na. :-)

AKTUALIZACJA: W końcu odzyskałem hasło, zaktualizowałem tekst do skopiowania, aby inni mogli po prostu kopiować i wklejać jak zawsze, a niektórzy mogą uzyskać indeksację danych (jeśli tak się dzieje). :-) Wesołego listopadowego wąsy.

Tabela przeliczeniowa

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);
Hikhuj
źródło
4
Dlaczego kciuki w dół? To naprawdę odpowiada na pytanie, abyś mógł sprawdzić, jak parsować inne typy
Davide,
4
@Davide Prawdopodobnie dlatego, że posty nie powinny zawierać ważnych informacji jako obrazu, gdy można je opublikować jako tekst. Obrazy nie mogą być wyszukiwane i kopiowane / wklejane, są często blokowane i nie mogą być odczytane przez użytkowników polegających na czytnikach ekranu.
Modus Tollens
Proszę edytować swój post i pokazać rzeczywisty tekst zamiast screenów. Inni nie mogą kopiować ani wklejać z twoich zdjęć. Zobacz tutaj, aby uzyskać szczegółowe informacje. Dziękuję Ci.
Pang
2
Zgadzam się z pytaniem @Davide - „Dlaczego kciuk w dół?”. Wierzę, że to sprawi, że użytkownik, który to dostanie, nie będzie uczestniczył w przepełnieniu stosu w przyszłości i uważam, że tak nie powinno być. Z mojej perspektywy „kciuki w dół” nigdy nie powinny być używane! Jest to w swej istocie negatywne i nie przynosi żadnej wartości.
Marco
Jesteś pewien, że char --> StringGoesHere.parseFloat(int position);to prawda? Szczerze mówiąc, nie sprawdziłem, ale jestem całkiem pewien, Stringże nie ma parseFloatmetody, a nawet jeśli tak, nie rozumiem, dlaczego to właśnie chciałbyś tam zrobić.
BeUndead,
3

Jeśli chcesz przeanalizować ciąg znaków do znaku, podczas gdy obiekt String reprezentuje więcej niż jeden znak, po prostu użyj następującego wyrażenia: char c = (char) Integer.parseInt (s) . Gdzie s oznacza ciąg, który chcesz przeanalizować. Większość ludzi zapomina, że ​​znaki char reprezentują liczbę 16-bitową, a zatem mogą być częścią dowolnego wyrażenia liczbowego :)

Adam Martinu
źródło
1
To jest źle. Przetwarzanie ciągu na liczbę oznacza, że ​​liczba została przekonwertowana na ciąg i chcemy odzyskać liczbę. Dokładnie w ten sam sposób, parsowanie znaku z łańcucha oznacza, że ​​znak został przekonwertowany na łańcuch i chcemy go przywrócić. Użycie numeru pośredniego nie jest tym, o co poprosił PO.
Vlad
@Vlad Poprosił o numer, ponieważ to właśnie charjest, tak jak inti double. Podał nawet przykład String„123”. a kto mówi, że nie możesz przekonwertować charna a Stringo długości większej niż jeden i odwrotnie? Wypróbuj sam z char c = 123: String.valueOf((int) c).equals("123")Returns true.
Adam Martinu
1
Przepraszam, ale wszystko sprowadza się do liczb, nie o to chodzi w tym pytaniu. Możesz spojrzeć na zaakceptowaną odpowiedź, która wyraźnie wyklucza półprodukt int. Na przykład musiałeś przesyłać do int, co oznacza, że ​​nie pracujesz z oryginałem char, ale z int, który w jakiś sposób odpowiada oryginałowi 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));
        }
    }
}
użytkownik6307216
źródło
Dodaj wyjaśnienie do swojej odpowiedzi.
André Kool,
1

Możesz wykonać następujące czynności:

String str = "abcd";
char arr[] = new char[len]; // len is the length of the array
arr = str.toCharArray();
Santosh Kulkarni
źródło
Możesz skrócić to do onelinerString str = "abc"; char[] char_str = str.toCharArray();
abhyudayasrinet
1

Możesz po prostu użyć toCharArray()do konwersji ciągu znaków na tablicę znaków:

    Scanner s=new Scanner(System.in);
    System.out.print("Enter some String:");
    String str=s.nextLine();
    char a[]=str.toCharArray();
Abhishek kumar singh
źródło
0

Esej:

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

Dane wyjściowe zobacz ten link: Kliknij tutaj

Dzięki :-)

Shiva Nandam Sirmarigari
źródło
0

Możesz użyć funkcji .charAt (int) z napisami, aby pobrać wartość char w dowolnym indeksie. Jeśli chcesz przekonwertować String na tablicę char, spróbuj wywołać .toCharArray () na String. Jeśli ciąg ma 1 znak, po prostu weź ten znak, wywołując .charAt (0) (lub .First () w C #).

Mayer Spitzer
źródło