Преобразование целочисленного представления слова обратно в строку - PullRequest
1 голос
/ 24 февраля 2012

Это домашнее задание, и у меня проблемы с выходом. Все работает как положено, за исключением того, что Integer.toString () не дает мне желаемого результата. Он по-прежнему выводит только несколько чисел, когда я хочу, чтобы они были преобразованы в фактическое слово. Вот код и вывод:

    import java.io.*;

    public class NumStream extends OutputStream
    {
        public void write(int c) throws IOException
        {  
            StringBuffer sb = new StringBuffer();
            switch(c)
            {
                case ' ': sb.append(" ");
                    break;
                case '1': sb.append("One");
                    break;
                case '2': sb.append("Two");
                    break;
                case '3': sb.append("Three");
                    break;
                case '4': sb.append("Four");
                    break;                
                case '5': sb.append("Five");
                    break; 
                case '6': sb.append("Six");
                    break;
                case '7': sb.append("Seven");
                    break;
                case '8': sb.append("Eight");
                    break;     
                case '9': sb.append("Nine");
                    break; 
                case '0': sb.append("Zero");
                    break;
                default:  sb.append(Integer.toString(c));
                    break;
            }
            System.out.print(sb);
        }
        public static void main(String[] args) 
        {
            NumStream ns = new NumStream();
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(ns));
            pw.println("123456789 and ! and # ");
            pw.flush();
        }
    }

вывод: OneTwoThreeFourFiveSixSevenEightNine 97110100 33 97110100 35 1310

Может кто-нибудь сказать, как проще форматировать код на этом форуме? Мне пришлось вручную делать 8 пробелов в каждой строке, и должен быть более простой способ!

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Для символов, которые не являются цифрами, вы берете код символа и конвертируете его в число.Таким образом, 97 110 и 100 - это коды символов для «a», «n» и «d», в то время как 33 и 35 - это ! и #.

. То, что вы, вероятно, хотите использовать для случая по умолчаниюпросто:

default: sb.append((char)c); break;

Обратите внимание, что создание нового StringBuffer при каждом вызове подпрограммы записи крайне расточительно и неэффективно.Поскольку вы добавляете в него только одну строку / символ, вы можете просто напечатать эту строку / символ напрямую, а не копировать через StringBuffer.

0 голосов
/ 24 февраля 2012

Вы выводите код ascii символов, которые не являются цифрами в sb.append(Integer.toString(c)).

...