如何在Java中将字符串转换/解析为字符?

237

如何在Java中将String类型的值解析为char类型?

我知道如何将其解析为int和double(例如Integer.parseInt("123"))。是否有用于Strings和Chars的类?


你想将一个字符串解析为字符数组吗?请更具体地说明。 - Zsombor Erdődy-Nagy
可能是重复的问题:如何将字符串转换为字符数组? - John Flatness
1
是的,但我没有看到任何可以帮助我将一个字符串如“a”更改为一个字符如‘a’的方法。 - Ren
9
我认为这不是重复内容。我只是尝试转换一个单独的字母。 - Ren
14个回答

334

如果您的字符串恰好包含一个字符,将其转换为字符的最简单方法可能是调用 charAt 方法:

char c = s.charAt(0);

2
对于多个字符:char[] c = s.toCharArray(); - user3133925

75

您可以使用.charAt(int)函数与字符串一起使用,以检索任何索引处的字符值。如果要将字符串转换为字符数组,请尝试在字符串上调用.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']

嗯,确实,虽然我本来是想将字符串中的单个字符转换,但这种方法也可以。 - Ren

48

你可以使用这个小技巧:

String s = "p";

char c = s.charAt(0);

但这会将“123”转换为“1”,这是你想要的吗? - aioobe
1
我并不是特意使用“123”。我只是举例而已。对于char类型,会有一个不同的例子,比如“p”,因为char类型是单个字符,而不是多个字符。 - Ren
1
toCharArray()函数返回一个字符数组,以便您将字符串拆分为字符。 - Genjuro

14

我发现这个很有用:

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
3
我同意@Davide的问题 - “为什么要点踩?” 我相信这会导致收到负评的用户在未来不再为stackoverflow做出贡献,而我认为这不应该是这种情况。 在我看来,“踩”永远不应该被使用! 它本质上是负面的,没有任何价值。 - Marco
1
你确定 char --> StringGoesHere.parseFloat(int position); 是正确的吗?老实说我没有检查过,但我相当确定 String 没有一个 parseFloat 方法,即使有,我也不明白为什么你会在那里尝试这样做。 - BeUndead

9
如果字符串只有1个字符,请直接取该字符。如果字符串不止1个字符,则无法将其解析为一个字符。

也许是一种hack方法,但可以实现。请参见http://stackoverflow.com/questions/21813888/build-char-from-string - Damo
你的陈述说一个长度超过1个字符的字符串不能被解析为整数是错误的,请看我的回答。 - Adam Martinu
@Adam:你的答案是错误的,我会在评论中解释。 - Vlad

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

 }

或者,如果您想单独选择,则可以这样做。
char ch = string.charAt(1);

4

String 转换为 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

3
如果您想将一个包含多个字符的字符串解析为字符,您只需要使用以下表达式: char c = (char) Integer.parseInt(s),其中s表示要解析的字符串。许多人忘记了字符代表一个16位数字,并且可以作为任何数值表达式的一部分 :)

1
这是错误的。将字符串解析为数字意味着将数字转换为字符串,而我们想要获取数字。同样地,从字符串解析字符意味着将字符转换为字符串,而我们想要字符。使用中间数字不是OP所询问的内容。 - Vlad
@Vlad他确实要求一个数字,因为这就是char的含义,就像intdouble一样。他甚至给出了例子String "123"。而且谁说你不能将长度大于1的char转换为String,然后再转回来呢?用char c = 123自己试试:String.valueOf((int) c).equals("123")返回true - Adam Martinu
1
抱歉,但一切都归结为数字,这不是问题的重点。您可以查看已接受的答案,该答案明确排除了中间的 int。对于您的示例,您需要进行 转换int,这意味着您正在使用的不是原始的 char,而是与原始 char 某种程度上对应的 int - 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接