我只是想知道是否有更好的解决方案来从字符串中的字符解析数字(假设我们知道索引n的字符是一个数字)。

String element = "el5";
String s;
s = ""+element.charAt(2);
int x = Integer.parseInt(s);

//result: x = 5

(说它只是一个例子没用)


当前回答

使用二进制与0b1111:

String element = "el5";

char c = element.charAt(2);

System.out.println(c & 0b1111); // => '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5

// '0' & 0b1111 => 0b0011_0000 & 0b0000_1111 => 0
// '1' & 0b1111 => 0b0011_0001 & 0b0000_1111 => 1
// '2' & 0b1111 => 0b0011_0010 & 0b0000_1111 => 2
// '3' & 0b1111 => 0b0011_0011 & 0b0000_1111 => 3
// '4' & 0b1111 => 0b0011_0100 & 0b0000_1111 => 4
// '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5
// '6' & 0b1111 => 0b0011_0110 & 0b0000_1111 => 6
// '7' & 0b1111 => 0b0011_0111 & 0b0000_1111 => 7
// '8' & 0b1111 => 0b0011_1000 & 0b0000_1111 => 8
// '9' & 0b1111 => 0b0011_1001 & 0b0000_1111 => 9

其他回答

Integer: Integer或int数据类型是一个32位有符号的二补整数。其值范围介于- 2,147,483,648(-2^31)到2,147,483,647(2^31 -1)(含)之间。其最小值为- 2,147,483,648,最大值为2,147,483,647。缺省值为0。int数据类型通常用作整型值的默认数据类型,除非内存没有问题。

Example: int a = 10

Character: char数据类型是单个16位Unicode字符。它的值范围在' \u0000 '(或0)到' \uffff '(或包括65,535)之间。char数据类型用于存储字符。

Example: char ch = 'c'

方法 有许多方法可以将Char数据类型转换为Integer (int)数据类型。下面列出了其中的一些。

使用ASCII值 使用String.valueOf()方法 使用Character.getNumericValue()方法

1. 使用ASCII值

此方法使用TypeCasting获取给定字符的ASCII值。相应的整数是从这个ASCII值减去0的ASCII值计算出来的。换句话说,该方法通过查找该char的ASCII值与ASCII值0之间的差值,将该char转换为int。

例子:

// Java program to convert
// char to int using ASCII value
  
class GFG {
    public static void main(String[] args)
    {
  
        // Initializing a character(ch)
        char ch = '3';
        System.out.println("char value: " + ch);
  
        // Converting ch to it's int value
        int a = ch - '0';
        System.out.println("int value: " + a);
    }
}

输出

char value: 3
int value: 3

2. 使用String.valueOf()方法

String类的valueOf()方法可以将各种类型的值转换为String值。它可以将int、char、long、boolean、float、double、object和char数组转换为String,可以使用Integer.parseInt()方法将String转换为int值。下面的程序演示了valueOf()方法的使用。

例子:

// Java program to convert
// char to int using String.valueOf()
  
class GFG {
    public static void main(String[] args)
    {
        // Initializing a character(ch)
        char ch = '3';
        System.out.println("char value: " + ch);
  
        // Converting the character to it's int value
        int a = Integer.parseInt(String.valueOf(ch));
        System.out.println("int value: " + a);
    }
}

输出

char value: 3
int value: 3

3.使用Character.getNumericValue()方法

Character类的getNumericValue()方法用于获取任何特定字符的整数值。例如,字符' 9 '将返回一个值为9的int。下面的程序演示了getNumericValue()方法的使用。

例子:

// Java program to convert char to int
// using Character.getNumericValue()
  
class GFG {
    public static void main(String[] args)
    {
  
        // Initializing a character(ch)
        char ch = '3';
        System.out.println("char value: " + ch);
  
        // Converting the Character to it's int value
        int a = Character.getNumericValue(ch);
        System.out.println("int value: " + a);
    }
}

输出

char value: 3
int value: 3

裁判:https://www.geeksforgeeks.org/java-program-to-convert-char-to-int/

String element = "el5";
int x = element.charAt(2) - 48;

从char中减去ascii值'0' = 48

从性能的角度来看,这可能是最好的,但它很粗糙:

String element = "el5";
String s;
int x = element.charAt(2)-'0';

如果你假设你的字符是一个数字,并且只在总是使用Unicode的语言中工作,比如Java…

试试下面的方法:

str1="2345";
int x=str1.charAt(2)-'0';
//here x=4;

如果你减去字符'0',ASCII值不需要知道。

使用二进制与0b1111:

String element = "el5";

char c = element.charAt(2);

System.out.println(c & 0b1111); // => '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5

// '0' & 0b1111 => 0b0011_0000 & 0b0000_1111 => 0
// '1' & 0b1111 => 0b0011_0001 & 0b0000_1111 => 1
// '2' & 0b1111 => 0b0011_0010 & 0b0000_1111 => 2
// '3' & 0b1111 => 0b0011_0011 & 0b0000_1111 => 3
// '4' & 0b1111 => 0b0011_0100 & 0b0000_1111 => 4
// '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5
// '6' & 0b1111 => 0b0011_0110 & 0b0000_1111 => 6
// '7' & 0b1111 => 0b0011_0111 & 0b0000_1111 => 7
// '8' & 0b1111 => 0b0011_1000 & 0b0000_1111 => 8
// '9' & 0b1111 => 0b0011_1001 & 0b0000_1111 => 9