从char中解析int值

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

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


//result: x = 5

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

572600 次浏览

Character.getNumericValue(char)试试。

String element = "el5";
int x = Character.getNumericValue(element.charAt(2));
System.out.println("x=" + x);

生产:

x=5

getNumericValue(char)的好处是它也适用于"el٥""el५"这样的字符串,其中٥分别是东阿拉伯语和北印度语/梵语中的数字5。

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

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值不需要知道。

String a = "jklmn489pjro635ops";


int sum = 0;


String num = "";


boolean notFirst = false;


for (char c : a.toCharArray()) {


if (Character.isDigit(c)) {
sum = sum + Character.getNumericValue(c);
System.out.print((notFirst? " + " : "") + c);
notFirst = true;
}
}


System.out.println(" = " + sum);

通过简单地减去字符'0'(零),一个字符(数字'0'到'9')可以转换为int(0到9),例如,'5'-'0'给出int 5。

String str = "123";


int a=str.charAt(1)-'0';

使用二进制AND0b1111:

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
String element = "el5";
int x = element.charAt(2) - 48;

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

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'
< p >方法 有许多方法可以将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/

博士tl;

Integer.parseInt( Character.toString( "el5".codePoints().toArray()[ 2 ] ) )

或者,格式:

Integer
.parseInt(               // Parses a `String` object whose content is characters that represent digits.
Character
.toString(           // Converts a code point integer number into a string containing a single character, the character assigned to that number.
"el5"            // A `String` object.
.codePoints()    // Returns an `IntStream`, a stream of each characters code point number assigned by the Unicode Consortium.
.toArray()       // Converts the stream of `int` values to an array, `int[]`.
[ 2 ]            // Returns an `int`, a code point number. For digit `5` the value here would be 53.
)                    // Returns a `String`, "5".
)                        // Returns an `int`, `5`.

请看这个代码在IdeOne.com上运行

5

char是遗留的

避免使用char。这种类型是Java 2遗留下来的,基本上被打破了。作为一个16位的值,char/Character类型不能代表大多数字符。

因此,避免调用element.charAt(2)。并避免单引号文字,如'5'

代码点

相反,使用代码点整数。

Unicode中定义的每一个超过140000字符都被永久地分配一个标识号码。这些数字从0到100多万不等。

您可以获得所有代码点数字的流,即IntStream

String element = "el5😷";
IntStream stream = element.codePoints() ;

你可以把它转换成一个数组。

int[] codePoints = element.codePoints().toArray() ;

然后访问该数组。

String out3 = "Third character: " + Character.toString( codePoints[2] ) + " | Code point: " + codePoints[2] + " | Named: " + Character.getName( codePoints[2] ) ;
String out4 = "Fourth character: " + Character.toString( codePoints[3] ) + " | Code point: " + codePoints[3] + " | Named: " + Character.getName( codePoints[3] ) ;


System.out.println( out3 ) ;
System.out.println( out4 ) ;

请看这个代码在IdeOne.com上运行

第三个字符:5 |码位:53 |名称:DIGIT FIVE

第四个字符:😷|代码点:128567 |命名:FACE WITH MEDICAL MASK

你可以测试一下代码点是否代表是数字的字符

if( Character.isDigit( codePoints[2] ) )
{
String digit = Character.toString( codePoints[2] ) ;
int i = Integer.parseInt( digit ) ;  // Parse the character `5` as a `int` integer number.
}