Javaで文字列から文字に変換/解析する方法は?


199

JavaでString値をchar型に解析するにはどうすればよいですか?

私はそれをintとdoubleにする方法を知っています(たとえばInteger.parseInt("123"))。文字列と文字のクラスはありますか?


Stringを解析してchar配列にしたいですか?より具体的にしてください。
ZsomborErdődy-Nagy2011


1
そうですが、「a」などの文字列を「a」などの文字に変更するのに役立つメソッドはありません
Yokhen

5
重複しているとは思いません。1文字だけを変換しようとしています。
Yokhen

回答:


295

文字列に1文字だけが含まれている場合、それを文字に変換する最も簡単な方法は、おそらくcharAtメソッドを呼び出すことです。

char c = s.charAt(0);

1
複数の文字の場合:char [] c = s.toCharArray();

67

文字列で.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']

まあ、確かに、文字列の1文字を変換しようとしていましたが、それでもうまくいくと思います。
Yokhen

48

あなたはこのトリックを使うことができます:

String s = "p";

char c = s.charAt(0);

しかし、それは変わり"123"'1'、それはあなたが後にしている何ですか?
aioobe 2011年

1
特に「123」を使用するつもりはありませんでした。私は例として使用していました。charの場合、charは複数の文字ではなく単一の文字であるため、「p」のような別の例になります。
Yokhen

1
toCharArray()関数は、文字列を文字に分割したい場合に備えて、文字の配列を返します
Genjuro

8

文字列は1文字が長い場合は、単にその文字を取ります。文字列が1文字でない場合、文字に解析できません。


ハックかもしれませんが、実行できます。stackoverflow.com/questions/21813888/build-char-from-stringを
Damo

1文字より長い文字列は整数に解析できないというあなたの声明は間違っています、私の答えを見てください。
Adam Martinu

@アダム:あなたの答えは間違っています。コメントで説明します。
Vlad



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を文字列として理解し、左の列のタイトルを「変換先」として理解しました。:-)

更新:それで、私はようやくパスワードを取り戻し、コピー可能なテキストで更新しました。そうすれば、他の人はいつものようにコピーして貼り付けることができます。:-)幸せな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

投稿を編集して、スクリーンショットではなく実際のテキストを表示してください。他の人はあなたの画像からコピーして貼り付けることができません。詳細はこちらをご覧ください。ありがとうございました。
2018年

2
@Davideの質問に同意します-「なぜイマイチですか?」これにより、これを取得したユーザーが将来的にスタックオーバーフローに関与しないようになると私は信じており、そうではないはずです。私の見解では、「イマイチ」は決して使用すべきではありません。それは本質的に否定的であり、まったく価値をもたらしません。
マルコ

あなたはそれが確信しているchar --> StringGoesHere.parseFloat(int position);正しいのですか?正直なところ、チェックしてStringいませんが、parseFloatメソッドがないことは確かだと思います。たとえメソッドがあったとしても、それがなぜあなたがそこでしようとしているのかはわかりません。
BeUndead

3

Stringをcharに解析したいが、Stringオブジェクトは複数の文字を表す場合は、次の式を使用するだけです: char c =(char)Integer.parseInt(s)。ここで、sは解析する文字列です。ほとんどの人は、charが16ビットの数値を表すことを忘れているため、任意の数値式の一部になることがあります:)


1
これは間違っています。文字列を数値に解析するということは、数値が文字列に変換されたことを意味し、数値を取り戻したいと考えています。まったく同じ方法で、文字列から文字を解析するということは、文字が文字列に変換されたことを意味し、文字を元に戻します。中間番号の使用は、OPが要求したものではありません。
Vlad

それが何だから@Vlad彼は、数を尋ねたのcharと同じように、あるintdouble。彼は例としてString「123」さえ与えた。そして、あなたはa charString1より長い長さのaに変換することはできないと言っていますか?それを自分で試してみてくださいchar c = 123String.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));
        }
    }
}

回答に説明を追加してください。
アンドレ・クール

1

次のことができます。

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

これをワンライナーに短縮できます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

エッセイの方法:

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

出力については、このリンクを参照してください:ここをクリック

ありがとう:-)


0

文字列で.charAt(int)関数を使用して、任意のインデックスのchar値を取得できます。Stringをchar配列に変換する場合は、Stringで.toCharArray()を呼び出してみてください。文字列が1文字の長さの場合、.charAt(0)(またはC#では.First())を呼び出して、その文字を取得します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.