2014-09-15 2 views
-5

. Существует сжатая строка, например. «Ab2c3», строка имеет строчные символы и цифры. Мы можем разжать данную строку следующим образом: всякий раз, когда мы получаем число «n» в строке, часть строки перед номером будет повторяться «n» раз. Итак, в приведенном выше примере мы получаем 2, поэтому строка станет «ababc3», теперь мы получим 3, поэтому последней строкой будет «ababcababcababc».Строка, содержащая и расширяемая

плз помочь мне в этом решении

import java.util.Scanner; 

public class Directi { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     System.out.print("Enter string: "); 
     String str = sc.nextLine(); 
     System.out.println("Input: " + str); 
     String b=""; 
     for(int i=0;i<str.length();i++) 
     { 
      char c= str.charAt(i); 
      int j=(int)c; 
      if(j>0 && j<=9) 

      { 
       System.out.println(j); 

       for(int k=0;k<j;k++) 
       { 

        b+=str.substring(0,j); 

       }  

      } 

     } 
     System.out.println(b); 
    } 

} 

например. String = ab2c3

+3

Что вы пробовали и то, что вы с проблема с? Я предлагаю вам начать с того, что вы можете сделать, и задать конкретный вопрос, когда вы застряли. –

+1

'j == 2 && j == 3 && j == 4 && j == 5 && j == 6 && j == 7 && j == 8 && j == 9' как вы думаете' j' может удерживать 2,3,4,5,6,7,8,9 в то же время? – BackSlash

+0

Проверьте, был ли неправильный код вставлен –

ответ

1

Одна ошибка приближения является ...

int j=(int)c; 

Это даст вам значение ASCii ...

Вы можете изменить его на

int j = Integer.parseInt(Character.toString(c)); 

Это должно быть изменение для желаемого выхода.

Ваш цикл должен быть

for(int i=0;i<str.length();i++) 
    { 
     Character c= str.charAt(i); 
     if(Character.isDigit(c)) { 
      int j=Integer.parseInt(Character.toString(c)); 
      for(int k=0;k<j;k++) 
      { 
       b+=str.substring(0,j); 
      } 
     } 
    } 

Следующая вещь, которая является неправильным является

b+=str.substring(0,j); 

Для вашего ожидаемого результата код должен быть

Scanner sc = new Scanner(System.in); 
    System.out.print("Enter string: "); 
    String str = sc.nextLine(); 
    System.out.println("Input: " + str); 
    String b="",temp=""; 
    for(int i=0;i<str.length();i++) 
    { 
     Character c= str.charAt(i); 
     if(Character.isDigit(c)) { 
      int j=Integer.parseInt(Character.toString(c)); 
      for(int k=0;k<j;k++) 
      { 
       b+=temp; 
      } 
      temp=b; 
     } else { 
      temp += c; 
     } 
    } 
    System.out.println(b); 
+0

Я попытался, но ошибка компилятора «Нельзя ссылаться на« Char » –

+0

Пожалуйста, проверьте правильность ... – StackFlowed

+0

да, спасибо, спасибо :) –

1
String result = ""; 
String currentString = ""; 
String multiplier = ""; 
for (char c : string) { 
    if (Character.isDigit(c)) { 
     multiplier += c; 
    } 
    else { 
     if (!multiplier.equals("")) { 
      for (int i = 0; i < Integer.parseInt(multiplier); i++) result += currentString; 
      currentString = ""; 
      multiplier = ""; 
     } 
     currentString += c; 
    } 
} 
+0

Что не так, поэтому я могу улучшить свой пост? – SimonPJ

+0

Я не вижу ничего плохого, хотя он сломается, скажем, 'a20b8'. Upvoted. – Pokechu22

+0

Я никогда не рассматривал двойные цифры. Интересно, это требование – SimonPJ