我只是想知道是否有更好的解决办法来从字符串中的字符解析数字(假设我们知道索引n处的字符是一个数字)。
String element = "el5";
String s;
s = ""+element.charAt(2);
int x = Integer.parseInt(s);
//result: x = 5
(毋庸置疑,这只是一个例子)
尝试使用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。
请尝试以下方法:
str1="2345";
int x=str1.charAt(2)-'0';
//here x=4;
如果您减去字符'0',则无需知道ASCII值。
'2'-'0'
,实际上就是计算50-48=2
。查看ASCII表可更好地理解这个原理。另外,在Java中,'x'表示获取字符的ASCII值。 - Kevin Van Ryckegem- '0'
起作用...我以为这是 Java 解释字符或其他东西的深奥魔法...这确实是我过于复杂化某些事情的情况... - scootsCharacter.getNumericValue
会更易读。 - Janac Meena从性能角度来看,那可能是最好的选择,但它很简陋:
String element = "el5";
String s;
int x = element.charAt(2)-'0';
如果你假设你的字符是数字,并且只在总是使用Unicode的语言(如Java)中才有效...
通过将数字字符(0到9)减去字符'0'(零),可以将其转换为整数(0到9),例如,'5'-'0'得到整数5。
String str = "123";
int a=str.charAt(1)-'0';
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);
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`.
5
char
已经过时了避免使用char
。这种类型在Java 2中就已经过时了,基本上是有问题的。作为一个16位值,char
/Character
类型无法表示大多数字符。
因此,避免调用element.charAt(2)
。也要避免使用单引号字面量,例如'5'
。
相反,使用代码点整数。
Unicode定义的超过140,000个字符中的每一个都被永久地分配了一个标识号码。这些数字从零到一百万多不等。
您可以获得所有代码点数字的流,即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 ) ;
第三个字符:5 | 代码点:53 | 命名:DIGIT FIVE
第四个字符: | 代码点:128567 | 命名:带医用口罩的脸
你可以测试一下代码点是否代表一个数字字符。
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.
}
整数:整数或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
字符:char数据类型是一个单一的16位Unicode字符。它的值范围在'\u0000'(或0)到'\uffff'(或65,535,包括)之间。char数据类型用于存储字符。
Example: char ch = 'c'
方法
有多种方法可以将Char类型转换为Integer(int)类型,以下列出了其中几种。
此方法使用类型转换来获取给定字符的ASCII值。 从0的ASCII值中减去该值得到相应的整数。 换句话说,此方法通过找到此字符的ASCII值和0的ASCII值之间的差异来将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
String 类的 valueOf() 方法可以将各种类型的值转换为字符串。它可以将 int、char、long、boolean、float、double、object 和 char 数组转换为字符串,这些字符串可以通过使用 Integer.parseInt() 方法转换为 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
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/
Character.digit
方法可以用于此操作。第一个参数是 char
或 int
代码点,第二个参数是基数。
char c = '5';
int x = Character.digit(c, 10); // result: 5
String element = "el5";
int x = element.charAt(2) - 48;
从字符中减去'0'的ASCII值=48
使用二进制 AND
和 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
Character.digit(char ch, int radix)
。如果你想限制只能是数字 0-9,你可以写成int x = Character.digit(element.charAt(2), 10);
。 - John Gilmer