java에서 String을 char로 변환 / 분석하는 방법은 무엇입니까?


199

Java에서 String값을 char유형으로 구문 분석하는 방법은 무엇입니까?

int 및 double (예 :)로 수행하는 방법을 알고 Integer.parseInt("123")있습니다. 문자열과 문자 클래스가 있습니까?


문자열을 char 배열로 파싱하고 싶습니까? 좀 더 구체적으로 설명하십시오.
Zsombor Erdődy-Nagy


1
예. 그러나 "a"와 같은 문자열을 'a'와 같은 문자로 변경하는 데 도움이되는 방법은 없습니다.
Yokhen

5
나는 그것이 중복이라고 생각하지 않습니다. 하나의 문자를 변환하려고합니다.
Yokhen

답변:


295

문자열에 정확히 하나의 문자가 포함되어 있으면 문자열을 문자로 변환하는 가장 간단한 방법은 아마도 charAt메서드 를 호출하는 것입니다.

char c = s.charAt(0);

1
둘 이상의 문자의 경우 : char [] c = s.toCharArray ();

67

Strings와 함께 .charAt (int) 함수를 사용하여 모든 인덱스에서 char 값을 검색 할 수 있습니다. String을 char 배열로 변환하려면 String에서 .toCharArray () 를 호출 하십시오.

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"와 다른 예입니다.
Yokhen

1
toCharArray () 함수는 문자열을 문자로 분할하려는 경우 문자 배열을 반환합니다.
Genjuro

8

문자열의 길이가 1자인 경우 해당 문자를 사용하십시오 . 문자열이 1 자 길이가 아닌 경우 문자로 구문 분석 할 수 없습니다.


어쩌면 해킹 일 수도 있지만 할 수 있습니다. 참조 stackoverflow.com/questions/21813888/build-char-from-string
다모

1 문자보다 긴 문자열을 정수로 파싱 할 수 없다는 진술은 잘못되었습니다. 내 대답을 참조하십시오.
Adam Martinu

@ 아담 : 당신의 대답이 잘못되었습니다, 나는 의견에 설명하겠습니다.
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으로 이해하고 왼쪽 열 제목을 Convert to로 이해하십시오. :-)

업데이트 : 마침내 암호를 다시 얻었고 복사 가능한 텍스트로 업데이트 했으므로 다른 사람들이 항상처럼 복사하여 붙여 넣을 수 있으며 일부는 데이터 색인을 생성 할 수 있습니다 (있는 경우). :-) 행복한 11 월 수염.

변환 표

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

제발 편집 게시물을 대신 스크린 샷의 실제 텍스트를 표시합니다. 다른 사람들은 이미지에서 복사하여 붙여 넣을 수 없습니다. 자세한 내용은 여기참조하십시오 . 감사합니다.
Pang

2
@Davide 질문에 동의합니다- "왜 거절합니까?" 나는 이것이 이것을 가진 사용자가 미래에 스택 오버 플로우에 기여하지 않을 것이라고 믿으며 이것이 사실이 아니어야한다고 믿습니다. 내 관점에서 "엄지 손가락"은 절대 사용해서는 안됩니다! 본질적으로 부정적이며 전혀 가치가 없습니다.
Marco

당신은 확신하는 char --> StringGoesHere.parseFloat(int position);올바른? 솔직히 확인 String하지는 않았지만 parseFloat방법 이 없다고 확신합니다. 그렇더라도 그렇게하는 이유가 무엇인지 알 수 없습니다.
BeUndead

3

String을 char로 구문 분석하려는 경우 String 객체는 둘 이상의 문자를 나타내지 만 단순히 다음 식을 사용하면됩니다. char c = (char) Integer.parseInt (s) . 여기서 s 는 구문 분석하려는 문자열과 같습니다. 대부분의 사람들은의 일부가 될 수 있습니다, 따라서 그 숯불의 16 비트 수를 나타냅니다 잊지 어떤 수치로 나타낸 것 :)


1
이것은 잘못이다. 문자열을 숫자로 파싱한다는 것은 숫자가 문자열로 변환되었음을 의미하며 우리는 숫자를 되찾고 싶습니다. 정확히 같은 방식으로 문자열에서 문자를 구문 분석하면 해당 문자가 문자열로 변환되었다는 것을 의미하므로 문자를 다시 원합니다. OP가 요구 한 것은 중간 번호를 사용하는 것이 아닙니다.
Vlad

그는 무엇 때문에 @Vlad 그는 숫자를 요청 않았다 char처럼,이다 intdouble. 그는 예를 들어 String"123"을 주었다 . 누가 a charString1보다 큰 길이 로 변환 할 수 없다고 말 합니까? 함께 스스로를보십시오 char c = 123: String.valueOf((int) c).equals("123")리턴 true.
Adam Martinu

1
미안하지만 모든 것이 숫자로 귀결됩니다. 문제의 핵심은 아닙니다. 허용되는 답변을 살펴볼 수 있습니다 int. 중간 답변은 분명히 제외됩니다 . 예를 들어,로 캐스팅 해야했습니다 int. 즉, 원본을 사용하지 않고 원본 charint해당하는을 사용합니다 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();

당신은 oneliner이 단축 될 수 있습니다String str = "abc"; char[] char_str = str.toCharArray();
abhyudayasrinet

1

간단히 toCharArray()문자열을 char 배열로 변환하는 데 사용할 수 있습니다 .

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


0

Strings와 함께 .charAt (int) 함수를 사용하여 모든 인덱스에서 char 값을 검색 할 수 있습니다. String을 char 배열로 변환하려면 String에서 .toCharArray () 를 호출 하십시오. 문자열의 길이가 1자인 경우 .charAt (0) (또는 C #의 .First ())를 호출하여 해당 문자를 가져옵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.