java将正确的数字替换成字母

时间:2014-03-06 19:27:22

标签: java numbers

嗯,这是我第一次来这里。

我正在试图找出将数字替换成字母的正确方法。 在这种情况下,我需要两个步骤。

首先,将字母转换为数字。第二,将数字恢复为单词。

单词列表:a = 1,b = 2,f = 6且k = 11.

我有话:“b a f k”

所以,首先,它必须是:“2 1 6 11”

数字“2 1 6 11”必须转换为“b a f k”。

但是,我在第二步失败了。

我试过的代码:

public class str_number {
public static void main(String[] args){
    String word = "b a f k";
    String number = word.replace("a", "1").replace("b","2").replace("f","6").replace("k","11");
    System.out.println(word);
    System.out.println(number);

    System.out.println();

    String text = number.replace("1", "a").replace("2","b").replace("6","f").replace("11","k");
    System.out.println(number);
    System.out.println(text);

}

}

结果:

b a f k

2 1 6 11

2 1 6 11

b a f aa

11必须是单词“k”,但它被转换为“aa”

解决此问题的正确方法是什么? 或者你有其他方法将信件转换为数字,反之亦然?

谢谢。

6 个答案:

答案 0 :(得分:1)

在这种情况下,我实际上不会使用替换。

更通用的解决方案是简单地将其转换为char并从中减去char a。

int n = word.charAt(0) - 'a' + 1;

这应该返回一个带有您正在寻找的值的int。

如果您希望这是一个字符串,您可以轻松完成

String s = Integer.parseInt(word.charAt(0) - 'a' + 1);

在你的情况下,你正在做一个完整的字符串循环遍历它并改变所有将给你结果

String s = "";
for(int i = 0; i < word.length(); i++) {
    if(s.charAt(i) != ' ') {            
        s = s + Integer.toString(word.charAt(i) - 'a' + 1) + " ";
    }
}

然后如果你想把它带回一个带字母的字符串

String text = "";
int temp = 0;
for(int i = 0; i < s.length(); i++) {
    if(s.charAt(i) == ' ') {
        text = text + String.valueOf((char) (temp + 'a' - 1));
        temp = 0;
    } else if {
        temp = (temp*10)+Character.getNumericValue(s.charAt(i));
    }
}

答案 1 :(得分:1)

编写数字和字母格式之间转换的方法会很好。我会写一些像这样的代码并且通常使用它而不是每次更换硬编码。

public class test {
    static ArrayList <String> letter = new ArrayList<String> ();
    static ArrayList <String> digit = new ArrayList<String> ();

    public static void main(String[] args) {

        createTable();
        String test="b a f k";
        String test1="2 1 6 11";
        System.out.println(letterToDigit(test));
        System.out.println(digitToLetter(test1));
    }

    public static void createTable()
    {
        //Create all your Letter to number Mapping here.
        //Add all the letters and digits
        letter.add("a");
        digit.add("1");

        letter.add("b");
        digit.add("2");

        letter.add("c");
        digit.add("3");

        letter.add("d");
        digit.add("4");

        letter.add("e");
        digit.add("5");

        letter.add("f");
        digit.add("6");

        letter.add("g");
        digit.add("7");

        letter.add("h");
        digit.add("8");

        letter.add("i");
        digit.add("9");

        letter.add("j");
        digit.add("10");

        letter.add("k");
        digit.add("11");

        letter.add("l");
        digit.add("12");

        letter.add("m");
        digit.add("13");

        letter.add("n");
        digit.add("14");

        letter.add("o");
        digit.add("14");

        letter.add("p");
        digit.add("15");
        //Carry so on till Z    
    }

    public static String letterToDigit(String input)
    {
        String[] individual = input.split(" ");
        String result="";

        for(int i=0;i<individual.length;i++){
            if(letter.contains(individual[i])){
                result+=Integer.toString(letter.indexOf(individual[i])+1)+ " "; 
            }   
        }
        return result;
    }

    public static String digitToLetter(String input)
    {
        String[] individual = input.split(" ");
        String result="";

        for(int i=0;i<individual.length;i++){
            if(digit.contains(individual[i])){
                result+=letter.get(digit.indexOf(individual[i])) + " ";
            }   
        }
        return result;  
    }
}

答案 2 :(得分:0)

替换它:

String text = number.replace("1", "a").replace("2","b").replace("6","f").replace("11","k");

由此:

 String text = number.replace("11","k").replace("1", "a").replace("2","b").replace("6","f");

现在,第一个替换你正在做的事:(“1”,“a”) 使最后一个无效:(“11”,“k”)

答案 3 :(得分:0)

此操作失败,因为replace("1", "a")1字符替换了两个 a。最快的解决方法是首先执行所有两位数字的replace,这样当替换单位数字时,不会再留下两位数的数字。

String text = number.replace("11","k").replace("1", "a").
                     replace("2","b").replace("6","f");

答案 4 :(得分:0)

您可以撤销替换:

String text = number.replace("11","k").replace("2","b").replace("6","f").replace("1","a");

最简单的解决方案IMO。 添加其他数字时,首先用两位数替换它们,然后用一位数替换它们。

答案 5 :(得分:0)

我认为您需要将数字存储为整数数组。否则,无法知道11是a还是k。我会创建一个Map,然后遍历String中的字符。你可以有一个char-to-int映射和一个int-to-char映射。

Map<Character,Integer> charToIntMap = new HashMap<Character,Integer>();
charToIntMap.put('a',1);
charToIntMap.put('b',2);
charToIntMap.put('f',6);
charToIntMap.put('k',11);

Map<Integer,Character> intToCharMap = new HashMap<Integer,Character>();
intToCharMap.put(1,'a');
intToCharMap.put(2,'b');
intToCharMap.put(6,'f');
intToCharMap.put(11,'k');

String testStr = "abfk";
int[] nbrs = new int[testStr.length()];


for(int i = 0; i< testStr.length(); i++ ){
    nbrs[i] = charToIntMap.get(testStr.charAt(i));
}

StringBuilder sb = new StringBuilder();
for(int num : nbrs){
    sb.append(num);
}
System.out.println(sb.toString());


//Reverse
sb = new StringBuilder();
for(int i=0; i<nbrs.length; i++){
    sb.append(intToCharMap.get(nbrs[i]));
}
System.out.println(sb.toString());