嗯,这是我第一次来这里。
我正在试图找出将数字替换成字母的正确方法。 在这种情况下,我需要两个步骤。
首先,将字母转换为数字。第二,将数字恢复为单词。
单词列表: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”
解决此问题的正确方法是什么? 或者你有其他方法将信件转换为数字,反之亦然?
谢谢。
答案 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());