Java: анализировать значение int из символа
Я просто хочу знать, есть ли лучшее решение для анализа числа из символа в строке (при условии, что мы знаем, что символ в индексе n является числом).
String element = "el5";
String s;
s = ""+element.charAt(2);
int x = Integer.parseInt(s);
//result: x = 5
(бесполезно говорить, что это всего лишь пример)
10 ответов
Пытаться 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;
если вычесть значение char '0', значение ASCII не нужно знать.
Это, наверное, лучшее с точки зрения производительности, но это грубо:
String element = "el5";
String s;
int x = element.charAt(2)-'0';
Это работает, если вы предполагаете, что ваш символ является цифрой, и только в языках, которые всегда используют Unicode, например, Java...
Путем простого вычитания из char '0'(ноль) char (от цифры '0' до '9') можно преобразовать в int(от 0 до 9), например, '5'-'0' дает int 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);
tl;dr
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
это наследие
Избегать использования . Этот тип был унаследован от Java 2, по сути, сломан. Как 16-битное значение,
char
/
Character
тип не может представлять большинство символов.
Так что не звоните
element.charAt(2)
. И избегайте одинарных кавычек, таких как
'5'
.
Кодовая точка
Вместо этого используйте целые числа кодовой точки .
Каждому из более чем 140000 символов, определенных в Unicode, постоянно присваивается идентификационный номер. Эти числа варьируются от нуля до чуть более миллиона.
Вы можете получить поток всех номеров кодовых точек, 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код запускается в прямом эфире на IdeOne.com .
Третий персонаж: 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.
}
Используя бинарный 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
The Character.digit
Для этого можно использовать метод. Первый аргумент – этоchar
илиint
кодовая точка, а вторая - это система счисления.
char c = '5';
int x = Character.digit(c, 10); // result: 5
Целое число: Тип данных Integer или int представляет собой 32-битное целое число с дополнением до двух со знаком. Его диапазон значений находится в диапазоне от - 2147483648 (-2^31) до 2147483647 (2^31-1) (включительно). Его минимальное значение - 2147483648, максимальное - 2147483647. Его значение по умолчанию - 0. Тип данных int обычно используется в качестве типа данных по умолчанию для целых значений, если нет проблем с памятью.
Example: int a = 10
Символ: тип данных char - это один 16-битный символ Юникода. Его диапазон значений находится в диапазоне от '\ u0000' (или 0) до '\ uffff' (или 65535 включительно). Тип данных char используется для хранения символов.
Example: char ch = 'c'
Подходы Существует множество подходов к преобразованию типа данных Char в тип данных Integer (int). Некоторые из них перечислены ниже.
- Использование значений ASCII
- Использование метода String.valueOf()
- Использование метода Character.getNumericValue()
1. Использование значений ASCII
Этот метод использует TypeCasting для получения значения ASCII данного символа. Соответствующее целое число вычисляется из этого значения ASCII путем вычитания его из значения ASCII, равного 0. Другими словами, этот метод преобразует char в int, находя разницу между значением ASCII этого символа и значением ASCII, равным 0.
Пример:
// 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);
}
}
Выход
2. Использование метода String.valueOf()
Метод valueOf() класса String может преобразовывать различные типы значений в значение String. Он может преобразовывать массивы int, char, long, boolean, float, double, object и char в String, который можно преобразовать в значение int с помощью метода Integer.parseInt (). В приведенной ниже программе показано использование метода 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);
}
}
Выход
3. Использование метода Character.getNumericValue()
Метод getNumericValue() класса Character используется для получения целочисленного значения любого конкретного символа. Например, символ «9» вернет int, имеющий значение 9. В приведенной ниже программе показано использование метода 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;
Вычитание значения ascii '0' = 48 из char