2012-05-17 65 views
1

比方说,我有一个计划,转换字母与数字使得:转换字母与数字

输入:ABCD

输出:1234

  1. 我怎么能转换ABCD至1234高效
  2. 以及如何从令牌中提取每个单独的字符

B顺便说一句,这不是功课。 (这是为了好玩)

这是我到目前为止有:

public class Test { 
public static void main(String[] args) throws IOException { 

    BufferedReader f = new BufferedReader(new FileReader("test.in")); 

    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("test.out.txt"))); 

    StringTokenizer st = new StringTokenizer(f.readLine()); 

    int i1 = Integer.parseInt(st.nextToken()); 

      // How can I convert this into integers? (where a = 1, b = 2, and c = 3) 

      out.println(????); 

     out.close(); 
     System.exit(0);        

    } 

} 
+4

大写字母,将其转换为ASCII,减去 'A',再加入1 –

+0

你的问题需要更多的规范。例如,'wxyz'应该转化为什么? –

回答

3

试试这个:

String s = "abcd"; 
StringBuilder sb = new StringBuilder(); 
for (char c : s.toCharArray()) { 
    sb.append((char)(c - 'a' + 1)); 
} 
// provided your string contains only lower case non-unicode (ASCII) characters. 
+7

你给了他鱼! –

+4

不只是鱼,他给了他在盘子里煮熟的鱼。 :) –

+1

Booo没有免费的鱼!我们要求混淆! – slezica

0

DERP,我读了整个问题是错误的。我的错。

你能做什么,是你有一个我认为的转换算法。 字母表中的每个字母都可以包含字母表中的值。

然后你所需要做的就是将你找到的字母与你的一个字母数组相匹配,得到它的索引,然后给它加1。然后你得到了价值。如果这就是你想玩的方式。

1

有每当你收到一个令牌采取从地图和打印带有按键为A,B,C等具有值1,2,3等定义的地图。

+1

+1这种技术允许范围广泛的恶作剧。 –

+0

谢谢@TonyEnnis – raddykrish

1

大写字母,将其转换为ASCII,减去'A',然后加1.如果处理多字符输入,则遍历字符串。按照前面的建议计算时,将先前的总和乘以10,然后添加新的值。

0

我想这是你正在寻找的方法:StringcharAt

的样本代码,将你所追求的:

String a="abcd"; 
for (int i = 0; i < a.length(); ++i) { 
    System.out.print(a.charAt(i)-'a'+1); 
} 
0

您可以尝试转换字符为int休息96,你要照顾超出范围的字符或使用正则表达式..

此示例转换ABCD至1234

与97(ALT + 9 7) z是炭122

A是炭65,这样就可以通过范围处理或刚打开字为小写

public static void main(String args[]){ 
     String abc = "abcd"; 
     String txt = ""; 

     for(int i=0; i<abc.length(); i++){ 
      txt+= ((int)abc.charAt(i) - 96); 
     } 

     System.out.println(txt); 
    } 

EDIT炭:

public static void main(String args[]){ 
     String abc = "AbCd"; 
     String txt = ""; 
     abc = abc.toLowerCase(); 

     for(int i=0; i<abc.length(); i++){ 
      int letter = (int)abc.charAt(i); 

      if(letter<97 || letter > 122)//in range 
      { 
       txt += ((int)abc.charAt(i) - 96); 
      } 

     } 

     System.out.println(txt); 
    } 
0

import java.util.Scanner; import java.io.*;

公共类LetteredNumerationSystem {

public static void main(String args[]){ 

File file = new File ("lettered.in"); 

    try{ 

    Scanner input = new Scanner(file); 

    int dataCollect = input.nextInt(); 
    int sum=0; 
    String lineInput =""; 


     for(int i=0;i<=dataCollect;i++){ 
     while (input.hasNext()){ 
     lineInput=input.next();  
     char lineArray[] = lineInput.toCharArray(); 
     for(int j=0;j<lineArray.length;j++){ 
      if (lineArray[j] == 'A'){ 
       sum+=1; 
      } 
      else if (lineArray[j] == 'B'){ 
       sum+=10; 
      } 
      else if (lineArray[j] == 'C'){ 
       sum+=100; 
      } 
      else if (lineArray[j] == 'D'){ 
       sum+=1000; 
      } 
      else if (lineArray[j] == 'E'){ 
       sum+=10000; 
      } 
      else if (lineArray[j] == 'F'){ 
       sum+=100000; 
      } 
      else if (lineArray[j] == 'G'){ 
       sum+=1000000; 
      } 
      else if (lineArray[j] == 'X'){ 
       System.out.println(sum); 
      sum=0; 
      } 
     } 
     } 
     }   
    } 

    catch(FileNotFoundException e){ 
     System.out.println("ERROR"); 
     } 




} 

}

+0

欢迎来到Stack Overflow!请解释你的代码的作用以及为什么它能解决问题。只包含代码的答案(即使它正在工作)通常不会帮助OP了解他们的问题。 – SuperBiasedMan