Java-如何将字符串中的字母转换为数字?

Java-如何将字符串中的字母转换为数字?,java,string,integer,Java,String,Integer,我对Java非常陌生,因此我想知道如何将字符串中的字母转换为数字,例如,hello world将输出为8 5 12 15 15 18 12 4。 所以a=1,b=2,z=26等等String s=“hello world”; String s = "hello world"; String t = ""; for (int i = 0; i < s.length(); ++i) { char ch = s.charAt(i); if (!t.isEmpty()) {

我对Java非常陌生,因此我想知道如何将字符串中的字母转换为数字,例如,
hello world
将输出为
8 5 12 15 15 18 12 4

所以
a=1
b=2
z=26
等等

String s=“hello world”;
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);
字符串t=“”; 对于(int i=0;i

这不涉及空间等问题。

您可以执行以下操作:

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');
  } 
}
for(int i=0;i如果(a.charAt(i)>='a'&&a.charAt(i)由于这很可能是一项学习任务,我将给你一个提示:拉丁字母表中字母的所有UNICODE代码点都是按字母顺序排列的。如果
a
的代码是某个数字
N
,那么
b
的代码是
N+1
c
的代码是
N+2
,依此类推;的代码是
Z
N+26

可以用减去整数的相同方法减去字符代码点

char ch = 'h';
int pos = ch - 'a' + 1;
生成
h
的序列号,即
8
。如果在循环中执行此计算,将得到所需的结果


请注意,上述公式仅适用于同一寄存器的字符。如果输入字符串的大小写混合,则在进行计算之前,需要将每个字符转换为小写,否则会出现错误。

Usa使用键为字符、值为整数的映射。这不是一种有效的方法-e map应该是类的静态成员

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);
}
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();
    }
}
import java.util.HashMap;
导入java.util.Map;
公共类JavaApplication1
{
公共静态void main(字符串[]args)
{
最终地图;
最后一个字符串str=“hello world”;
map=新的HashMap();
//或者map=newhashmap,如果您使用的是Java7之前的版本。
地图放置('a',1);
地图放置('b',2);
地图放置('c',3);
地图放置('d',4);
地图放置('e',5);
地图放置('f',6);
地图放置('g',7);
地图放置('h',8);
地图放置('i',9);
地图放置('j',10);
地图放置('k',11);
地图放置('l',12);
地图放置('m',13);
地图放置('n',14);
地图放置('o',15);
地图放置('p',16);
地图放置('q',17);
地图放置('r',18);
地图.put('s',19);
地图放置('t',20);
地图放置('u',21);
地图放置('v',22);
地图放置('w',23);
地图放置('x',24);
地图放置('y',25);
地图放置('z',26);
for(最终字符c:str.toCharArray())
{
最终整数val;
val=map.get(c);
if(val==null)
{   
//某种错误
}
其他的
{
系统输出打印(val+“”);
}
}
System.out.println();
}
}

对于位置i处的每个字符:输出s.charAt(i)-'a'+1.s是字符串。

如果需要,如果字符串仅包含数字和字母,则可以使用以下测试代码将字符串转换为数字

 public static Long getNumericReferenceNumber(String str) {

        String result = "";

        for (int i = 0; i < str.length(); i++) {

            char ch = str.charAt(i);

            if (Character.isLetter(ch)) {
                char initialCharacter = Character.isUpperCase(ch) ? 'A' : 'a';
                result = result.concat(String.valueOf((ch - initialCharacter + 1)));
            } else result = result + ch;
        }

        return Long.parseLong(result);
    }
公共静态长getNumericReferenceNumber(字符串str){
字符串结果=”;
对于(int i=0;i
我添加了所有字符以获得公平的结果:

public static long stringToNumber(String s) {
    long result = 0;

    for (int i = 0; i < s.length(); i++) {
        final char ch = s.charAt(i);
        result += (int) ch;
    }

    return result;
}
公共静态长字符串编号(字符串s){
长结果=0;
对于(int i=0;i
将任何字符串视为基数x的数字,其中x是用于描述该字符串的字母表的长度,然后将该数字转换为另一个基数10的数字。谷歌搜索处理基数转换的算法

如果我们采用英文键盘布局,这里的x可以等于26+26+10+1(空格)+y,其中y是特殊字符数


最常见的例子是从十六进制(以16为基数)转换为十进制、以10为基数以及从二进制转换为十进制等等。

OP希望将每个字母映射到其在字母表中的位置。这就是我对它的理解。+1是唯一尝试教授的答案,而不是给出代码。+1用于详细解释。BDW这个问题被问到在面试中,我用同样的方法回答我:)我不明白你为什么要这样做。“这不是一个有效的方法”=有一个更好的方法-它是什么?这是一个容易理解的方法。如果不经常使用,那么效率就不重要了。目标1是使其正确,目标2是使其易于理解/维护,目标3是使其快速。如果你有其他目标,它们可能会插入到目标2和目标3之间。一般来说,速度并不那么重要,这样,您就可以找出代码的速度慢的地方,然后决定如何最好地加快它。