Я новичок в Java, поэтому мне интересно, как вы конвертируете букву в строку в число, например. hello world
будет выводиться как 8 5 12 12 15 23 15 18 12 4
.
так a=1
, b=2
, z=26
и т.д.
Java - как преобразовать буквы в строку в число?
Ответ 1
Так как это скорее всего учебное задание, я дам вам подсказку: все кодовые точки UNICODE для букв латинского алфавита упорядочены по алфавиту. Если код a
- это некоторое число N
, то код b
равен N+1
, код c
равен N+2
и так далее; код Z
равен N+26
.
Вы можете вычитать точки символьного кода так же, как вы вычитаете целые числа. Поскольку кодовые точки в алфавитном порядке, следующий расчет
char ch = 'h';
int pos = ch - 'a' + 1;
выдает порядковый номер h
, т.е. 8
. Если вы выполните этот расчет в цикле, вы получите результат, который вам нужен.
Обратите внимание, что приведенная выше формула работает только с символами того же регистра. Если ваша входная строка находится в смешанном случае, вам нужно преобразовать каждый символ в нижний регистр перед выполнением вычисления, иначе это получится неправильно.
Ответ 2
String s = "hello world";
String t = "";
for (int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
if (!t.isEmpty()) {
t += " ";
}
int n = (int)ch - (int)'a' + 1;
t += String.valueOf(n);
}
System.out.println(t);
Это не касается пространства и т.д.
Ответ 3
public static void main(String[] args) {
String s = "hello world";
s = s.replace(" ", "");
char[] c = s.toCharArray();
for (Character ss : c)
System.out.println(ss - 'a' + 1);
}
Ответ 4
Usa a Map с ключом, являющимся символом, и значением являются целые числа. Это не эффективный способ - карта должна быть статическим членом класса.
import java.util.HashMap;
import java.util.Map;
public class JavaApplication1
{
public static void main(String[] args)
{
final Map<Character, Integer> map;
final String str = "hello world";
map = new HashMap<>();
// or map = new HashMap<Character, Integer> if you are using something before Java 7.
map.put('a', 1);
map.put('b', 2);
map.put('c', 3);
map.put('d', 4);
map.put('e', 5);
map.put('f', 6);
map.put('g', 7);
map.put('h', 8);
map.put('i', 9);
map.put('j', 10);
map.put('k', 11);
map.put('l', 12);
map.put('m', 13);
map.put('n', 14);
map.put('o', 15);
map.put('p', 16);
map.put('q', 17);
map.put('r', 18);
map.put('s', 19);
map.put('t', 20);
map.put('u', 21);
map.put('v', 22);
map.put('w', 23);
map.put('x', 24);
map.put('y', 25);
map.put('z', 26);
for(final char c : str.toCharArray())
{
final Integer val;
val = map.get(c);
if(val == null)
{
// some sort of error
}
else
{
System.out.print(val + " ");
}
}
System.out.println();
}
}
Ответ 5
для каждого символа в позиции i: output s.charAt(i) - 'a' + 1. s - строка.
Ответ 6
Вы можете сделать что-то вроде:
for (int i = 0; i < a.length(); ++i) {
if (a.charAt(i) >= 'a' && a.charAt(i) <= 'z') {
System.out.println((int)a.charAt(i) - (int)'a');
}
}