web-dev-qa-db-ja.com

Java-文字列内の文字を数字に変換する方法?

私はJavaが初めてなので、文字列内の文字を数字に変換するにはどうすればよいでしょうか。たとえば、hello world8 5 12 12 15 23 15 18 12 4として出力されます。
so a=1b=2z=26など.

15
user2099816

これは学習課題である可能性が高いため、ヒントを示します。ラテンアルファベットの文字のすべてのUNICODEコードポイントはアルファベット順に並べられます。 aのコードが何らかの番号Nである場合、bのコードはN+1cのコードはN+2、 等々; ZのコードはN+26

整数を減算するのと同じ方法で、文字コードポイントを減算できます。コードポイントはアルファベット順になっているため、次の計算

char ch = 'h';
int pos = ch - 'a' + 1;

hのシーケンス番号、つまり8。この計算をループで実行すると、必要な結果が得られます。

上記の式は、同じレジスタの文字でのみ機能することに注意してください。入力文字列が大文字と小文字が混在している場合は、計算を行う前に各文字を小文字に変換する必要があります。そうしないと、間違った結果になります。

53
dasblinkenlight
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);

これはスペースなどを扱いません。

1
Joop Eggen

位置iの各文字:s.charAt(i)-'a' + 1を出力します。 sは文字列です。

1
user2018791
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);
}
1
Achintya Jha

キーが文字で、値が整数であるマップを使用します。これは効率的な方法ではありません-マップはクラスの静的メンバーである必要があります。

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();
    }
}
1
TofuBeer

次のようなことができます:

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');
  } 
}
0

必要に応じて、文字列に数字とアルファベットのみが含まれている場合、以下のテスト済みコードを使用して文字列を数字に変換できます。

 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);
    }
0

公正な結果を得るために、すべてのキャラクターを追加しました。

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;
}
0
Dan Alboteanu