2013-09-28 4 views
0

Я работаю над назначением класса с несколькими отдельными частями, которые я все сделал, за исключением этого. Мне нужно получить строковый ввод от пользователя и создать цикл (предпочтительно цикл for), который вставляет звездочки между каждым символом. Я полностью потрясен этим, поэтому, если кто-то может просто помочь мне начать, это будет оценено по достоинству.Java - Добавление звездочек между введенной пользователем строкой

Edit: Я пришел с этим до сих пор

} else if (choice.equalsIgnoreCase("C")) { 
     System.out.print("Enter text here: "); 
     String orig = input.nextLine(); 

     // To use for asterisk insertion 
     int x = 1; 
     int y = 2; 

     for (int length = orig.length(); length > 0;) { 
      orig = orig.substring(0,x) + "*" + orig.substring(y); 
      x = x + 2; 
      y = y + 2; 
     } 

    } 

Это компилирует нормально, но когда я проверить его и ввести текст он приходит с Исключение в нити «главного» java.lang. индекс строки из диапазона:: StringIndexOutOfBoundsException 5

+2

Что вы пробовали до сих пор и где вы столкнулись с проблемой? Кроме того, почему «(предпочтительно, для цикла)»? Почему имеет значение, какой цикл вы используете? – nhgrif

+0

Это назначение цикла. Мы должны использовать один, пока-то, и для цикла. Цикл for - единственный, который я не использовал. Я знаю, что мне нужно использовать метод .substring (x, y), но я не уверен, как его настроить, чтобы цикл вставлял звездочки между каждым символом строки, которую вводит пользователь. – user2827341

ответ

3

Вы можете использовать цикл на символы строки (см ниже), но я бы просто сделать это:

str = str.replaceAll("(?<=.)(?=.)", "*"); 

Регулярное выражение в параметре поиска совпадает с точкой между любыми двумя символами, полученными с помощью внешнего вида и внешнего вида, каждый из которых утверждает, что там есть символ.


Если вы должны использовать цикл, код Простейших вероятно:

String result = input.isEmpty() ? "" : input.substring(0, 1); 
for (int i = 1; i < input.length(); i++) 
    result += "*" + input.charAt(i); 

Несколько сложнее первая линия обслуживает ребро случае ввод пользователя заготовки. Цикл for уже обслуживает пустой ввод, поскольку условие завершения всегда будет ложным для пустого, поэтому оно не будет именоваться вообще.

+0

К сожалению, для этого я должен использовать цикл. Однако, спасибо. – user2827341

+0

См. Отредактированный ответ для изящного решения (IMHO). Если вы используете код, убедитесь, что вы его полностью понимаете, так что это все еще опыт обучения. – Bohemian

Смежные вопросы