Як перетворити / проаналізувати з String в char в Java?


199

Як я розібрав Stringзначення на charтип у Java?

Я знаю, як це зробити для int та double (наприклад Integer.parseInt("123")). Чи є клас для струнних та чарців?


Ви хочете проаналізувати рядок у масиві char? Будь ласка, будьте більш конкретними.
Zsombor Erdődy-Nagy


1
Так, але я не бачу в ньому жодного методу, який би допоміг мені змінити рядок типу "a" на такий знак, як "a"
Yokhen

5
Я не думаю, що це дублікат. Я намагаюся просто перетворити одну букву.
Йохен

Відповіді:


295

Якщо ваш рядок містить точно один символ, найпростішим способом його перетворення в символ є, ймовірно, виклик charAtметоду:

char c = s.charAt(0);

1
Для більш ніж одного символу: char [] c = s.toCharArray ();

67

Ви можете використовувати .charAt (int) функцію за допомогою Strings, щоб отримати значення знака в будь-якому індексі. Якщо ви хочете перетворити String в масив char, спробуйте зателефонувати .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']

Що ж, правда, хоча я прагнув перетворити один символ у рядок, я думаю, це теж могло працювати.
Йохен

48

Ви можете використовувати цей трюк:

String s = "p";

char c = s.charAt(0);

Але це перетвориться "123"на '1'це те, що ви хочете?
aioobe

1
Я не мав на увазі спеціально використовувати "123". Я просто використовував як приклад. Для char це був би інший приклад, як "p", оскільки char - це один символ, а не декілька.
Йохен

1
функція toCharArray () повертає масив символів на випадок, якщо ви хочете розділити рядок на символи
Genjuro

8

Якщо рядок довжиною 1 символ, просто візьміть цей символ . Якщо рядок не має 1 символу, її неможливо розібрати на символ.


Можливо зламати, але це можна зробити. Дивіться stackoverflow.com/questions/21813888/build-char-from-string
Дамо

Ваша заява про те, що рядок, довший 1 символу, неможливо проаналізувати на ціле число, неправильна, дивіться мою відповідь.
Адаму Мартіну

@Adam: Ваша відповідь неправильна, я поясню в коментарі.
Влад



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. :-)

ОНОВЛЕННЯ: Отже, я нарешті повернув свій пароль, я оновив текст, який можна скопіювати, щоб інші могли просто копіювати та вставляти, як завжди, а для деяких інших, які можуть отримати індексацію даних (якщо вона є). :-) Щасливі листопадові вуса.

Таблиця переходів

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
Чому великі пальці вниз? Це дійсно відповідає на питання, так що ви можете перевірити, як розбирати інші типи
Девід

4
@ Надіслати Можливо, тому, що повідомлення не повинні містити важливу інформацію як зображення, коли вона може бути розміщена як текст. Зображення не можна шукати та копіювати / вставляти, часто блокуються та не можуть їх читати користувачі, покладаючись на зчитувачі екрану.
Modus Tollens

Будь ласка , змініть свій пост і показати фактичний текст замість скріншотів. Інші не можуть копіювати та вставляти з ваших зображень. Детальніше дивіться тут . Дякую.
Панг

2
Я згоден з питанням @Davide - "Чому великі пальці вниз?". Я вважаю, що це змусить користувача, який отримав це, не сприяти стаковерху в майбутньому, і я вважаю, що це не повинно бути так. З моєї точки зору, "великі пальці вниз" ніколи не слід використовувати! Він за своєю суттю негативний і зовсім не приносить ніякої цінності.
Марко

Ви впевнені, що char --> StringGoesHere.parseFloat(int position);це правильно? Чесно кажучи , я не перевіряв, але я абсолютно впевнений , Stringне має parseFloatметод, і навіть якщо це станеться, я не можу зрозуміти , чому це було б те , що ви намагаєтеся зробити там.
BeUndead

3

Якщо ви хочете проаналізувати рядок до char, тоді як об'єкт String представляє більше одного символу, ви просто використовуєте таке вираження: char c = (char) Integer.parseInt (s) . Де s дорівнює рядку, який потрібно розібрати. Більшість людей забувають, що символи char представляють 16-бітне число, і тому вони можуть бути частиною будь-якого числового виразу :)


1
Це неправильно. Розбір рядка до числа означає, що число було перетворене в рядок, і ми хочемо повернути число. Точно так само, розбір символу з рядка означає, що персонаж був перетворений у рядок, і ми хочемо повернути символ. Використання проміжного номера - це не те, про що запитували ОП.
Влад

@Vlad Він попросив номер, тому що це charтаке, як intі double. Він навіть наводив приклад String"123". і хто каже, що ви не можете перетворити charна а Stringз довжиною, більшою за одиницю, і назад? Спробуйте самі char c = 123: String.valueOf((int) c).equals("123")повертається true.
Адаму Мартіну

1
Вибачте, але все зводиться до цифр, це не сенс питання. Ви можете подивитися на прийняту відповідь, яка чітко виключає проміжний продукт int. Для прикладу, вам необхідно гіпсу до int, що означає , що ви працюєте ні з оригіналом char, але з int, що трапляється так чи інакше відповідає оригіналу char.
Влад

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

Ви можете скоротити це до onelinerString 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

Ви можете використовувати .charAt (int) функцію за допомогою Strings, щоб отримати значення знака в будь-якому індексі. Якщо ви хочете перетворити String в масив char, спробуйте зателефонувати .toCharArray () на String. Якщо рядок довжиною 1 символ, просто взяти цей символ, викликавши .charAt (0) (або. First () в C #).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.