Dönüştürmek / ayrıştırmak için String için char içinde java?


200

Java'da Stringbir chartüre nasıl değer ayrıştırabilirim ?

Bunu int ve double'a nasıl yapacağımı biliyorum (örneğin Integer.parseInt("123")). Dizeler ve Karakterler için bir sınıf var mı?


Bir dizeyi karakter dizisine ayrıştırmak mı istiyorsunuz? Lütfen daha spesifik ol.
Zsombor Erdődy-Nagy


1
Evet ama içinde "a" gibi bir String'i 'a' gibi bir karakterle değiştirmeme yardımcı olacak herhangi bir yöntem görmüyorum
Yokhen

5
Bunun bir kopya olduğunu sanmıyorum. Sadece bir harfi dönüştürmeye çalışıyorum.
Yokhen

Yanıtlar:


295

Dizeniz tam olarak bir karakter içeriyorsa, onu bir karaktere dönüştürmenin en basit yolu muhtemelen charAtyöntemi çağırmaktır :

char c = s.charAt(0);

1
Birden fazla karakter için: char [] c = s.toCharArray ();

67

Herhangi bir dizindeki karakter değerini almak için Dizeler ile .charAt (int) işlevini kullanabilirsiniz . Dizeyi bir char dizisine dönüştürmek istiyorsanız, Dizede .toCharArray () yöntemini çağırmayı deneyin .

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

Doğru, bir dizede tek bir karakteri dönüştürmeye çalışmama rağmen, sanırım bu da işe yarayabilir.
Yokhen

48

bu numarayı kullanabilirsiniz:

String s = "p";

char c = s.charAt(0);

Ama bu "123"dönüşecek '1', peşinde olduğun şey bu mu?
aioobe

1
Özellikle "123" kullanmak istememiştim. Sadece örnek olarak kullanıyordum. Karakter için bu karakter "p" gibi farklı bir örnek olacaktır çünkü karakter birden fazla karakter değil, tek bir karakterdir.
Yokhen

1
toCharArray () işlevi, dizenizi karakterlere bölmek istediğinizde bir dizi karakter döndürür
Genjuro


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

 }

veya ayrı ayrı istiyorsanız o zaman yapabilirsiniz

char ch = string.charAt(1);


4

Bir dönüştürmek için en basit yolu Stringbir hiç charkullanıyor 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

İşte tam bir komut dosyası:

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

Biraz geç olabilirim ama bu yararlı buldum, Cadena'yı String olarak anladım ve sol sütun başlığını Convert'e çevirdim. :-)

GÜNCELLEME: Bu yüzden, sonunda şifremi geri aldım, kopyalanabilir metinle güncelledim, böylece diğerleri her zamanki gibi kopyalayıp yapıştırabilir ve bazılarının verileri (eğer varsa) endeksleyebileceğini kopyalayabilir. :-) Mutlu Kasım Bıyığı.

Dönüşüm Tablosu

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
Neden beğenmedim? Bu gerçekten soruyu cevaplar, böylece diğer türlerde nasıl ayrıştırılacağını kontrol edebilirsiniz
Davide

4
@Davide Muhtemelen yayınlar metin olarak gönderilebildiğinde önemli bilgileri resim olarak içermemelidir. Görüntüler aranamaz ve kopyalanamaz / yapıştırılamaz, genellikle engellenir ve ekran okuyucularına güvenen kullanıcılar tarafından okunamaz.
Modus Tollens

Lütfen yayınınızı düzenleyin ve ekran görüntüleri yerine gerçek metni gösterin. Diğerleri resimlerinizden kopyalayıp yapıştıramaz. Ayrıntılar için buraya bakın. Teşekkür ederim.
Pang

2
@Davide sorusuna katılıyorum - "Neden başparmak aşağı?". Bunun, bunu alan kullanıcının ileride stackoverflow'a katkıda bulunmamasını sağlayacağına ve bunun böyle olmaması gerektiğine inanıyorum. Benim açımdan "başparmak aşağı" hiç kullanılmamalıdır! Özünde negatiftir ve hiçbir değer getirmez.
Marco

Bunun char --> StringGoesHere.parseFloat(int position);doğru olduğundan emin misin ? Dürüst olmak gerekirse kontrol etmedim, ama eminim Stringki bir parseFloatyöntemim yok ve öyle olsa bile, orada yapmaya çalıştığınız şeyin neden bu olduğunu göremiyorum.
BeUndead

3

Bir String'i bir karakterle ayrıştırmak istiyorsanız, String nesnesi birden fazla karakteri temsil eder, sadece şu ifadeyi kullanırsınız: char c = (char) Integer.parseInt (s) . Burada s , ayrıştırmak istediğiniz Dizeye eşittir. Çoğu kişi, char'ların 16 bitlik bir sayıyı temsil ettiğini unutur ve böylece herhangi bir sayısal ifadenin bir parçası olabilir :)


1
Bu yanlış. Bir dizeyi sayıya ayrıştırmak, sayının bir dizeye dönüştürüldüğü anlamına gelir ve sayıyı geri almak istiyoruz. Tam olarak aynı şekilde, bir karakteri bir dizeden ayrıştırmak, karakterin bir dizeye dönüştürüldüğü anlamına gelir ve karakteri geri istiyoruz. Bir ara sayı kullanmak OP'nin istediği şey değildir.
Vlad

@Vlad Bir numara istedi, çünkü a charbu, aynen intve gibi double. Hatta String"123" örneğini bile verdi . ve kim bir dönüştüremezsiniz diyor charbir karşı Stringbir ve arka daha büyük bir uzunluğa sahip? Kendiniz deneyin char c = 123: String.valueOf((int) c).equals("123")döner true.
Adam Martinu

1
Üzgünüm, ama her şey sayılara kayıyor, bu sorunun konusu değil. Bir ara ürünü açıkça hariç tutan kabul edilen cevaba bir göz atabilirsiniz int. Örneğin, yayınlamanız gerekiyordu int, bu da orijinal charile değil, bir intşekilde orijinale karşılık gelen bir ile çalıştığınız anlamına geliyor 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));
        }
    }
}

Lütfen cevabınıza biraz açıklama ekleyin.
André Kool

1

Aşağıdakileri yapabilirsiniz:

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

Bunu bir oneliner'a kısaltabilirsinizString str = "abc"; char[] char_str = str.toCharArray();
abhyudayasrinet

1

toCharArray()Bir dizeyi char dizisine dönüştürmek için şunu kullanabilirsiniz :

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

0

Bir Deneme yolu:

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

Çıktı için bu bağlantıya bakın: Buraya tıklayın

Teşekkürler :-)


0

Herhangi bir dizindeki karakter değerini almak için Dizeler ile .charAt (int) işlevini kullanabilirsiniz . Dizeyi bir char dizisine dönüştürmek istiyorsanız, Dizede .toCharArray () yöntemini çağırmayı deneyin . Dize 1 karakter uzunluğundaysa, .charAt (0) (veya C # içindeki .First () öğesini çağırarak o karakteri almanız yeterlidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.