วิธีการแปลง / แยกจาก String เป็น char ใน java


199

ฉันจะแยกStringค่าcharประเภทใน Java ได้อย่างไร

ฉันรู้วิธีที่จะทำเพื่อ int และสองครั้ง (ตัวอย่างInteger.parseInt("123")) มีคลาสสำหรับ Strings and Chars หรือไม่?


คุณต้องการแยกสตริงเป็นอาร์เรย์อักขระ? กรุณาเจาะจงมากขึ้น
Zsombor Erdődy-Nagy


1
ใช่ แต่ฉันไม่เห็นวิธีการใด ๆ ในนั้นที่จะช่วยให้ฉันเปลี่ยนสตริงเช่น "a" เป็นคนถ่านเช่น 'a'
Yokhen

5
ฉันไม่คิดว่ามันจะซ้ำกัน ฉันพยายามแปลงตัวอักษรเพียงตัวเดียว
Yokhen

คำตอบ:


295

หากสตริงของคุณมีอักขระหนึ่งตัววิธีที่ง่ายที่สุดในการแปลงเป็นอักขระน่าจะเรียกcharAtเมธอดดังกล่าว:

char c = s.charAt(0);

1
สำหรับอักขระมากกว่าหนึ่งตัว: char [] c = s.toCharArray ();

67

คุณสามารถใช้ฟังก์ชัน. charAt (int)กับ Strings เพื่อดึงค่าถ่านที่ดัชนีใด ๆ หากคุณต้องการแปลง String เป็นถ่านให้ลองโทร. toCharArray ()บน 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']

จริงอยู่แม้ว่าฉันจะพยายามแปลงอักขระหนึ่งตัวในสตริง แต่ฉันคิดว่ามันก็ใช้ได้เหมือนกัน
Yokhen

48

คุณสามารถใช้เคล็ดลับนี้:

String s = "p";

char c = s.charAt(0);

แต่ที่จะเปิด"123"เข้ามา'1'นั่นคือสิ่งที่คุณหลังจาก?
aioobe

1
ฉันไม่ได้ตั้งใจใช้ "123" โดยเฉพาะ ฉันแค่ใช้เป็นตัวอย่าง สำหรับ char มันจะเป็นตัวอย่างที่แตกต่างกันเช่น "p" เนื่องจากอักขระ char เป็นอักขระตัวเดียวไม่ใช่หลายตัว
Yokhen

1
ฟังก์ชั่น toCharArray () ส่งกลับอาร์เรย์ของตัวอักษรในกรณีที่คุณต้องการที่จะแยกสตริงของคุณเป็นตัวอักษร
Genjuro

8

หากสตริงมีความยาว 1 อักขระให้ใช้อักขระนั้น หากสตริงมีความยาวไม่เกิน 1 อักขระจะไม่สามารถแยกวิเคราะห์เป็นอักขระได้


อาจจะเป็นแฮ็ค แต่สามารถทำได้ ดูstackoverflow.com/questions/21813888/build-char-from-string
Damo

คำสั่งของคุณบอกว่าสตริงที่ยาวเกิน 1 ตัวอักษรไม่สามารถแยกเป็นจำนวนเต็มผิดดูคำตอบของฉัน
Adam Martinu

@ Adam: คำตอบของคุณไม่ถูกต้องฉันจะอธิบายในความคิดเห็น
Vlad

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

 }

หรือถ้าคุณต้องการทีละคนคุณสามารถเป็น

char ch = string.charAt(1);


4

วิธีที่ง่ายที่สุดในการแปลง a Stringเป็น a charคือ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

นี่คือสคริปต์แบบเต็ม:

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

ฉันอาจจะช้าไปหน่อย แต่ฉันพบว่ามีประโยชน์นี้เข้าใจ cadena เป็น String และชื่อคอลัมน์ด้านซ้ายเป็นแปลงเป็น :-)

อัปเดต: ดังนั้นในที่สุดฉันก็ได้รับรหัสผ่านกลับมาฉันอัปเดตด้วยข้อความที่สามารถใช้งานได้ดังนั้นผู้อื่นอาจเพียงแค่คัดลอกและวางอย่างเช่นเคยและสำหรับคนอื่น ๆ ที่สามารถรับการจัดทำดัชนีของข้อมูลได้ :-) หนวดพฤศจิกายนมีความสุข

ตารางการแปลง

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
ทำไมต้องยกนิ้วให้? นี่เป็นการตอบคำถามจริงๆเพื่อที่คุณจะได้สามารถตรวจสอบวิธีการแยกประเภทอื่น ๆ ได้
Davide

4
@Davide อาจเป็นเพราะโพสต์ไม่ควรมีข้อมูลสำคัญเป็นภาพเมื่อสามารถโพสต์เป็นข้อความได้ ไม่สามารถค้นหาและคัดลอก / วางภาพได้มักจะถูกบล็อกและผู้ใช้ไม่สามารถอ่านหน้าจอได้
Modus Tollens

โปรดแก้ไขโพสต์ของคุณและแสดงข้อความจริงแทนภาพหน้าจอ คนอื่นไม่สามารถคัดลอกและวางจากรูปภาพของคุณ ดูรายละเอียดที่นี่ ขอบคุณ.
ปาง

2
ฉันเห็นด้วยกับคำถาม @Davide - "ทำไมต้องยกนิ้วลง" ฉันเชื่อว่าสิ่งนี้จะทำให้ผู้ใช้ที่ได้รับสิ่งนี้ไม่ได้มีส่วนร่วมกับ stackoverflow ในอนาคตและฉันเชื่อว่าสิ่งนี้ไม่ควรเกิดขึ้น จากมุมมองของฉัน "นิ้วหัวแม่มือลง" ไม่ควรใช้! มันเป็นลบในสาระสำคัญและไม่ได้นำคุณค่าใด ๆ มาเลย
มาร์โก

คุณแน่ใจหรือว่าchar --> StringGoesHere.parseFloat(int position);ถูกต้อง? จริง ๆ แล้วฉันยังไม่ได้ตรวจสอบ แต่ฉันค่อนข้างแน่ใจว่าStringไม่มีparseFloatวิธีการและแม้ว่าจะเป็นเช่นนั้นฉันก็ไม่สามารถมองเห็นได้ว่าทำไมถึงเป็นสิ่งที่คุณพยายามทำที่นั่น
BeUndead

3

หากคุณต้องการที่จะแยกสตริงเพื่อถ่านในขณะที่วัตถุ String แทนมากกว่าหนึ่งตัวคุณเพียงแค่ใช้ความต่อไปนี้: ถ่าน c = (ถ่าน) Integer.parseInt (s) ที่ไหนsเท่ากับสตริงที่คุณต้องการที่จะแยก คนส่วนใหญ่ลืมว่า char เป็นตัวแทนของตัวเลข 16 บิตและสามารถเป็นส่วนหนึ่งของการแสดงออกเชิงตัวเลขใด ๆ :)


1
นี่เป็นสิ่งที่ผิด การแยกสตริงเป็นตัวเลขหมายความว่าตัวเลขนั้นถูกแปลงเป็นสตริงและเราต้องการรับตัวเลขกลับมา วิธีเดียวกันการแยกอักขระจากสตริงหมายความว่าอักขระถูกแปลงเป็นสตริงและเราต้องการให้อักขระกลับมา การใช้หมายเลขกลางไม่ใช่สิ่งที่ OP ถาม
Vlad

@Vlad เขาไม่ขอหมายเลขเพราะนั่นคือสิ่งที่charเป็นเช่นเดียวกับและint doubleเขายังให้ตัวอย่างString"123" และใครบอกว่าคุณไม่สามารถแปลง a charเป็น a Stringด้วยความยาวใหญ่กว่าหนึ่งและย้อนกลับได้? ลองตัวเองกับchar c = 123: ผลตอบแทนString.valueOf((int) c).equals("123") true
Adam Martinu

1
ขอโทษด้วย แต่ทุกอย่างก็ลดลงไปถึงตัวเลขนั่นไม่ใช่ประเด็นของคำถาม intคุณสามารถดูได้ที่คำตอบที่ได้รับการยอมรับที่ชัดเจนไม่รวมกลาง สำหรับตัวอย่างของคุณคุณจำเป็นต้องโยนไปintซึ่งหมายความว่าคุณกำลังทำงานไม่ได้อยู่กับที่เดิมcharแต่กับที่เกิดขึ้นอย่างใดตรงกับต้นฉบับint 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));
        }
    }
}

โปรดเพิ่มคำอธิบายลงในคำตอบของคุณ
André Kool

1

คุณสามารถทำสิ่งต่อไปนี้:

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

คุณสามารถย่อให้เป็น onelinerString str = "abc"; char[] char_str = str.toCharArray();
abhyudayasrinet

1

คุณสามารถใช้toCharArray()เพื่อแปลงสตริงให้เป็นอาร์เรย์ถ่าน:

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


0

คุณสามารถใช้ฟังก์ชัน. charAt (int)กับ Strings เพื่อดึงค่าถ่านที่ดัชนีใด ๆ หากคุณต้องการแปลง String เป็นถ่านให้ลองโทร. toCharArray ()บน String หากสตริงมีความยาว 1 ตัวอักษรให้ใช้ตัวอักษรนั้นโดยการเรียก. charAt (0) (หรือ .First () ใน C #)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.