Làm cách nào để chuyển đổi / phân tích cú pháp từ String sang char trong java?


199

Làm cách nào để phân tích một Stringgiá trị thành một charloại, trong Java?

Tôi biết làm thế nào để làm điều đó đến int và double (ví dụ Integer.parseInt("123")). Có một lớp cho Chuỗi và Chars?


Bạn muốn phân tích một chuỗi thành một mảng char? Xin hãy cụ thể hơn.
Zsombor Erdődy-Nagy


1
Vâng, nhưng tôi không thấy bất kỳ phương thức nào trong đó sẽ giúp tôi thay đổi một Chuỗi như "a" thành một char như 'a'
Yokhen

5
Tôi không nghĩ đó là một bản sao. Tôi đang cố gắng chỉ chuyển đổi một chữ cái duy nhất.
Yokhen

Câu trả lời:


295

Nếu chuỗi của bạn chứa chính xác một ký tự, cách đơn giản nhất để chuyển đổi nó thành ký tự có lẽ là gọi charAtphương thức:

char c = s.charAt(0);

1
Đối với nhiều hơn một ký tự: char [] c = s.toCharArray ();

67

Bạn có thể sử dụng hàm .charAt (int) với Chuỗi để truy xuất giá trị char ở bất kỳ chỉ mục nào. Nếu bạn muốn chuyển đổi Chuỗi thành một mảng char, hãy thử gọi .toCharArray () trên Chuỗi.

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

Chà, đúng vậy, mặc dù tôi đang tìm cách chuyển đổi một ký tự trong một chuỗi, tôi đoán nó cũng có thể hoạt động.
Yokhen

48

bạn có thể sử dụng thủ thuật này:

String s = "p";

char c = s.charAt(0);

Nhưng điều đó sẽ biến "123"thành '1', đó có phải là những gì bạn đang theo đuổi?
aioobe

1
Tôi không có ý sử dụng cụ thể "123". Tôi chỉ sử dụng như một ví dụ. Đối với char, đây sẽ là một ví dụ khác như "p" vì char là một ký tự đơn, không phải nhiều ký tự.
Yokhen

1
Hàm toCharArray () trả về một mảng các ký tự trong trường hợp bạn muốn chia chuỗi của mình thành các ký tự
Genjuro

8

Nếu chuỗi dài 1 ký tự, chỉ cần lấy ký tự đó . Nếu chuỗi không dài 1 ký tự, nó không thể được phân tách thành một ký tự.


Có thể là một hack, nhưng có thể được thực hiện. Xem stackoverflow.com/questions/21813888/build-char-from-opes
Damo

Tuyên bố của bạn nói rằng một chuỗi dài hơn 1 ký tự không thể được phân tích cú pháp thành một số nguyên là sai, hãy xem câu trả lời của tôi.
Adam Martinu

@Adam: Câu trả lời của bạn là sai, tôi sẽ giải thích trong một bình luận.
Vlad

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

 }

hoặc Nếu bạn muốn cá nhân thì bạn có thể

char ch = string.charAt(1);


4

Cách đơn giản nhất để chuyển đổi a Stringthành a charlà sử dụng 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

Đây là một kịch bản đầy đủ:

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

Tôi có thể hơi muộn nhưng tôi thấy điều này hữu ích, hiểu cadena là Chuỗi và tiêu đề cột bên trái là Chuyển đổi thành. :-)

CẬP NHẬT: Vì vậy, cuối cùng tôi đã lấy lại được mật khẩu của mình, tôi đã cập nhật bằng văn bản có thể sao chép để những người khác có thể sao chép và dán như mọi khi, và đối với một số người khác có thể lấy chỉ mục của dữ liệu (nếu có). :-) Bộ ria mép tháng 11 vui vẻ.

Bảng hội tụ

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
Tại sao ngón tay cái xuống? Điều này thực sự trả lời câu hỏi, vì vậy bạn có thể kiểm tra cách phân tích các loại khác
Davide

4
@Davide Có lẽ vì bài đăng không nên bao gồm thông tin quan trọng dưới dạng hình ảnh khi nó có thể được đăng dưới dạng văn bản. Hình ảnh không thể được tìm kiếm và sao chép / dán, thường bị chặn và không thể được đọc bởi người dùng dựa trên trình đọc màn hình.
Modus Tollens

Vui lòng chỉnh sửa bài viết của bạn và hiển thị văn bản thực tế thay vì ảnh chụp màn hình. Những người khác không thể sao chép và dán từ hình ảnh của bạn. Xem ở đây để biết chi tiết. Cảm ơn bạn.
Pang

2
Tôi đồng ý với câu hỏi @Davide - "Tại sao lại bỏ qua?". Tôi tin rằng điều này sẽ khiến người dùng nhận được điều này không đóng góp với stackoverflow trong tương lai và tôi tin rằng điều này không nên xảy ra. Từ quan điểm của tôi "không nên dùng ngón tay cái"! Bản chất của nó là tiêu cực và không mang lại bất kỳ giá trị nào cả.
Marco

Bạn có chắc char --> StringGoesHere.parseFloat(int position);là đúng? Thành thật mà nói tôi chưa kiểm tra, nhưng tôi khá chắc chắn Stringkhông có parseFloatphương pháp nào và thậm chí nếu có, tôi không thể hiểu tại sao đó lại là điều bạn sẽ cố gắng làm ở đó.
BeUndead

3

Nếu bạn muốn phân tích một Chuỗi thành một char, trong khi đối tượng String đại diện cho nhiều hơn một ký tự, bạn chỉ cần sử dụng biểu thức sau: char c = (char) Integer.parseInt (s) . Trong đó s bằng Chuỗi bạn muốn phân tích. Hầu hết mọi người quên rằng char đại diện cho một số 16 bit, và do đó có thể là một phần của bất kỳ biểu thức số nào :)


1
Cái này sai. Phân tích một chuỗi thành một số có nghĩa là số đó đã được chuyển đổi thành một chuỗi và chúng tôi muốn lấy lại số đó. Chính xác theo cùng một cách, phân tích một ký tự từ một chuỗi có nghĩa là ký tự đó đã được chuyển đổi thành một chuỗi và chúng tôi muốn ký tự trở lại. Sử dụng số trung gian không phải là những gì OP yêu cầu.
Vlad

@Vlad Anh ấy đã xin một số, bởi vì đó là những gì char, giống như intdouble. Ông thậm chí còn đưa ra ví dụ String"123". và ai nói bạn không thể chuyển đổi từ a charsang a Stringcó chiều dài lớn hơn một và ngược lại? Hãy thử nó với char c = 123: String.valueOf((int) c).equals("123")trả về true.
Adam Martinu

1
Xin lỗi, nhưng mọi thứ đều sôi sục với những con số, đó không phải là vấn đề. Bạn có thể có một cái nhìn vào câu trả lời được chấp nhận, trong đó loại trừ rõ ràng một trung gian int. Ví dụ của bạn, bạn cần truyền tới int, điều đó có nghĩa là bạn đang làm việc không phải với bản gốc char, mà với một int, điều này xảy ra bằng cách nào đó tương ứng với bản gốc 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));
        }
    }
}

Vui lòng thêm một số giải thích cho câu trả lời của bạn.
André Kool

1

Bạn có thể làm như sau:

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

Bạn có thể rút ngắn điều này thành một onelinerString str = "abc"; char[] char_str = str.toCharArray();
abhyudayasrinet

1

Bạn chỉ có thể sử dụng toCharArray()để chuyển đổi một chuỗi thành mảng char:

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

0

Một cách tiểu luận:

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

Đối với đầu ra xem liên kết này: Bấm vào đây

Cảm ơn :-)


0

Bạn có thể sử dụng hàm .charAt (int) với Chuỗi để truy xuất giá trị char ở bất kỳ chỉ mục nào. Nếu bạn muốn chuyển đổi Chuỗi thành một mảng char, hãy thử gọi .toCharArray () trên Chuỗi. Nếu chuỗi dài 1 ký tự, chỉ cần lấy ký tự đó bằng cách gọi .charAt (0) (hoặc .First () trong C #).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.