Как преобразовать / разобрать из строки в символ в Java?


199

Как разобрать Stringзначение для charтипа в Java?

Я знаю, как сделать это для int и double (например Integer.parseInt("123")). Есть ли класс для строк и символов?


Вы хотите разобрать строку в массив символов? Пожалуйста, будьте более конкретны.
Жомбор Эрдёди-Надь


1
Да, но я не вижу в этом никакого метода, который бы помог мне изменить строку, такую ​​как «а», на символ, такой как «а»
Йохен

5
Я не думаю, что это дубликат. Я пытаюсь просто конвертировать одну букву.
Йохен

Ответы:


295

Если ваша строка содержит ровно один символ, самый простой способ преобразовать ее в символ - это вызвать charAtметод:

char c = s.charAt(0);

1
Для более чем одного символа: char [] c = s.toCharArray ();

67

Вы можете использовать функцию .charAt (int) со строками для получения значения char по любому индексу. Если вы хотите преобразовать 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
Damo

Ваше утверждение о том, что строка длиннее 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

Возможно, я немного опоздал, но я нашел это полезным, понимаю кадену как 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
Почему большие пальцы вниз? Это действительно ответ на вопрос, так как вы можете проверить, как анализировать в других типах
Davide

4
@Davide Вероятно, потому что сообщения не должны включать важную информацию в виде изображения, когда она может быть опубликована в виде текста. Изображения нельзя искать и копировать / вставлять, они часто блокируются и не могут быть прочитаны пользователями, использующими программы чтения с экрана.
Модус Толленс

Пожалуйста, отредактируйте свой пост и покажите реальный текст вместо скриншотов. Другие не могут копировать и вставлять из ваших изображений. Смотрите здесь для деталей. Спасибо.
Пан

2
Я согласен с вопросом @Davide - «Почему большие пальцы вниз?». Я полагаю, что это заставит пользователя, который получил это, не вносить свой вклад в стекоперемещение в будущем, и я считаю, что это не должно иметь место. С моей точки зрения "большие пальцы вниз" никогда не должны использоваться! Он отрицателен по своей сути и не несет никакой ценности.
Марко

Вы уверены, что char --> StringGoesHere.parseFloat(int position);это правильно? Честно говоря, я не проверял, но я уверен, что у Stringнего нет parseFloatметода, и даже если он есть, я не могу понять, почему это было бы тем, что вы пытаетесь сделать там.
BeUndead

3

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


1
Это не верно. Разбор строки в число означает, что число было преобразовано в строку, и мы хотим получить число обратно. Точно так же, анализ символа из строки означает, что символ был преобразован в строку, и мы хотим, чтобы символ вернулся. Использование промежуточного номера не то, о чем спрашивал ОП.
Влад

@Vlad Он попросил номер, потому что это то, что charесть, так же, как intи double. Он даже привел пример String«123». а кто сказал, что нельзя конвертировать charв a 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();

Вы можете сократить это до String str = "abc"; char[] char_str = str.toCharArray();
единого

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) со строками для получения значения char по любому индексу. Если вы хотите преобразовать String в массив char, попробуйте вызвать .toCharArray () для String. Если длина строки составляет 1 символ, просто возьмите этот символ, вызвав .charAt (0) (или .First () в C #).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.