2013-11-21 5 views
0

CS студент здесь. Я хочу написать программу, которая будет распаковывать строку, которая была закодирована в соответствии с измененной формой кодирования длины (для которой я уже написал код). Например, если строка содержит «bba10», она распадается на «bbaaaaaaaaaa». Как заставить программу распознавать, что часть строки ('10') является целым числом?Эксплуатационная декомпрессия

Спасибо за чтение!

+2

Спросите чувак, который написал компрессор :) – fvu

+3

Более интересный вопрос: как бы вы отличить это от случая, когда строка содержит буквально символы '10' – Henry

+0

Если в вашей строке нет номеров, кроме тех, то это легко. – MightyPork

ответ

-1

Предполагая, что вы не спрашиваете о разборе, вы можете преобразовать строку типа «10» в целое число, как это:

int i = Integer.parseInt("10"); 
+0

CS Студент, говорящий о декомпрессии, я уверен, что разбирается в синтаксисе целого числа – Cruncher

0

Не уверен, является ли один эффективный способ, но только для справки

for (int i=0;i<your_string.length();i++) 
    if (your_string.charAt(i)<='9' && your_string.charAt(i)>='0') 
     integer_begin_location = i; 
+0

Так я бы это сделал, но это неполно. После того, как вы найдете начальное местоположение, вам нужно найти конечное местоположение, а также – Cruncher

+0

точно да, но полностью зависит от формата входной строки. – JQian

+0

Вам понадобится второй цикл, чтобы найти конечное местоположение? – CSpadawan

4

Простой регулярное выражение будет делать.

final Matcher m = Pattern.compile("(\\D)(\\d+)").matcher(input); 
final StringBuffer b = new StringBuffer(); 
while (m.find()) 
    m.appendReplacement(b, replicate(m.group(1), Integer.parseInt(m.group(2)))); 
m.appendTail(b); 

где replicate является

String replicate(String s, int count) { 
    final StringBuilder b = new StringBuilder(count); 
    for (int i = 0; i < count; i++) b.append(s); 
    return b.toString(); 
} 
0

Я думаю, что вы можете разделить символы в числовых и не числовых символов.

Когда вы найдете числовой один (> 0 и < 9) вы посмотрите на следующий и выбрать, чтобы увеличить вам номер (текущий * 10 + новый) или расширить строку

0

Предполагая, что несжатые данные делает никогда не содержат цифр: Итерируйте по строке, символ по символу, пока не получите цифру. Затем продолжайте до тех пор, пока у вас не будет цифра (или конец строки). Цифры между ними могут быть разобраны на целое число, как другие уже говорились:

int count = Integer.parseInt(str.substring(start, end)); 
Смежные вопросы