2015-03-01 2 views
0

Я должен был написать программу для класса, который:Альтернатива для переключения - замены символов

  1. Принимал .txt файл
  2. преобразования чисел 0-9 в файле их текстовый эквивалент (если номер находится в начале предложения, используйте прописные)
  3. печати готовые предложения в новый файл

Пример:

The 8 eggs were separated into 3 groups. 

бы быть преобразованы в:

The eight eggs were separated into three groups. 

В настоящее время я использую (очень) длинный переключатель заявление с StringBuilder для выполнения задачи:

switch(sb.charAt(i)){ 
     case '0': 
      if (i == 0) 
       sb.replace(i, i+1, "Zero"); 
      else 
       sb.replace(i, i+1, "zero"); 
      break; 
     case '1': 
      if (i == 0) 
       sb.replace(i, i+1, "One"); 
      else 
       sb.replace(i, i+1, "one"); 
      break; 
     ..... 
} 

Там является более продвинутый/эффективный способ выполнения этой задачи?

+0

Насколько велика может ваши цифры добраться. Это только 0-10 или, возможно, 0-999999999? – user3437460

+0

Для этой программы используется только 0-9. Я уточню вопрос. – atwalsh

+0

см. Мое решение ниже. Преобразование strNumbers в текст, вам не нужно использовать 10 операторов swtich или 10 if. – user3437460

ответ

4

Возможно, вы ищете HashMap. Это может помочь:

  1. Создать статический HashMap<String, String> DIGITS и использовать put("0", "zero"); put("1", "one"); //etc.. для его инициализации.
  2. Разделите строку ввода, используя string.split(" "); это создаст массив таких строк: {"The","8","eggs",...}.
  3. Использование StringBuilder построить ответ:

    for (String s : splitted) { 
        if (DIGITS.contains(s)) 
         sb.append(DIGITS.get(s)); 
        else 
         sb.append(s); 
        sb.append(' '); 
    } 
    
+1

Вы забыли создать свой HashMap: 'private static HashMap h = new HashMap <>();' – Everv0id

+1

@Tom исправил мой ответ. – Everv0id

0

Вы можете сделать это таким образом.

Sting[] token = statement.split(" "); 
String newStatement = ""; 
for(int x=0; x<token.length; x++){ 
    if(token[x].matches("[0-9]+")) 
     newStatement += convertToText(token[x]) + " "; 
    else 
     newStatement += token[x] + " ";   
} 

public static String converetToText(String str){ 
    String[] text = {"zero", "one", "two", "three", "four", "five", "six", "seven". "eight", "nine"}; 
    return text[Integer.parseInt(str)]; 
} 

Вся ваша программа завершена.


Объяснение:

  1. Split данное утверждение пробелами.
  2. магазин отдельное слово в строку массива (маркер [])
  3. Проверьте каждое отдельное слово, является ли это число
  4. Если это число преобразовать в текст и добавить его в новое заявление.
  5. Если это текст, добавьте его прямо в ваше новое заявление.
0

Я хотел бы сделать что-то вроде этого. Итеражируйте символы, используя Character.isDigit, чтобы проверить, следует ли их заменять.Если это так просто смотреть на строку замены в массиве, используя (символ - '0') как индекс:

String[] textArray = new String[]{ "zero", "one", "two", 
             "three", "four", "five", 
             "six", "seven", "eight", "nine" }; 

    StringBuilder sb = new StringBuilder("abc 1 xyz 8"); 
    System.out.println(sb); 

    for (int i=0; i<sb.length(); ++i) { 
     char c = sb.charAt(i); 
     if (Character.isDigit(c)) { 
      sb.replace(i, i+1, textArray[c - '0']); 
     } 
    } 
    System.out.println(sb); 

Выход:

abc 1 xyz 8 
abc one xyz eight 
Смежные вопросы