2014-11-28 4 views
-1

Прошу прощения, если мои вопросы трудно понять, английский не является моим основным языком, надеюсь, вы, ребята, сможете терпеть мой английский. Я пишу код, который читает текст, введенный пользователем, и преобразует определенное слово во все верхние регистры, например nice становится NICE. Слово «хорошо» может быть сочетанием нижнего и верхнего регистров, таких как Nice NIce NICe NiCE NicE NiCe nICe nicE и т. Д., И в конце этих «хороших» будет преобразовано в NICE. Поскольку существует много сочетаний «приятного» слова, я устанавливаю свой исходный текст ввода для всего нижнего регистра и заменяю «nice» на NICE. Проблема, с которой я сталкиваюсь сейчас, это не знаю, как распечатать только конечный результат, который является хорошим миром, преобразованным в NICE. программа, которую я пишу сейчас, выполняет преобразование 1 на 1., что очень длинное, если у меня есть много «хороших» слов в моем строковом вводе. Есть ли лучший способ сделать это? Большое спасибо. Вот мой кодЗамените слово nice на верхний регистр NICE java

import java.util.Scanner; 

public class Substitute 
{ 
    public static void main (String[] args) 
    { 

     String search = "nice"; 

     String sub = "NICE"; 

     String result = ""; 

     int i; 

     Scanner input = new Scanner(System.in); 

     String yourSentence; 

     System.out.print("enter your text here: "); 

     yourSentence = input.nextLine(); 

     String actualWord = yourSentence.toLowerCase(); 


     do 
     { 

      System.out.println(actualWord); 

      i = actualWord.indexOf(search); 

      if (i != -1) 
      { 

       result = actualWord.substring(0,i); 

       result = result + sub + actualWord.substring(i + search.length()); 

       actualWord = result; 
      } 

     } while (i != -1); 


    } 
} 

и это

my output --------------------Configuration: <Default>-------------------- 
enter your text here: be nice to your families and be NicE to your friends too. Also be NICe to everyone in this world 

be nice to your families and be nice to your friends too. also be nice to everyone in this world 

be NICE to your families and be nice to your friends too. also be nice to everyone in this world 

be NICE to your families and be NICE to your friends too. also be nice to everyone in this world 

be NICE to your families and be NICE to your friends too. also be NICE to everyone in this world 

Written by blabla 


Process completed. 
+1

'Я не знаю, как распечатать только конечный результат', переместите строку' System.out.println (actualWord); 'под цикле' do/while'. – Tom

+0

@Tom. Это работает так, как я хотел. Большое спасибо, Том. У меня есть вопрос, хотя, нормально ли перемещать ** System.out.println (actualWord); ** ниже цикла ** do/while? ** Я думал, что для ** do/while ** loop я всегда должен напишите инструкции в начале цикла «do», а затем «while» условно. – NumbNuts

+0

Тело цикла (код между '{' и '}') может содержать все, что должно быть выполнено 'x' раз (или как долго некоторое условие является« истинным »). Если вы хотите что-то напечатать несколько раз, напишите это в тело цикла. Если вы этого не хотите, тогда не пишите там: D. Нет правил, которые говорят, что для цикла требуется 'System.out.println'. – Tom

ответ

3

Как насчет yourSentence.replaceAll("(?i)nice", "NICE");

0

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

String inputText = "your text....."; 
Pattern searchPattern = Pattern.compile("nice|bad|ugly", PATTERN_CASE_INSENSITIVE); 
Matcher m = searchPattern.matcher(inputText); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    m.appendReplacement(sb, m.group(1).toUpperCase()); 
} 
m.appendTail(sb); 
-2

Это должно решить вашу проблему.

Scanner input = new Scanner(System.in); 
//Convert the Scanner object to a String 
String str = input.toString(); 
//Get the beginning index for "nice" 
int begin = str.indexOf("nice"); 
//Get the ending index for "nice" 
int end = str.indexOf(" ", begin); 
//Replace the string between begin and end with NICE 
str.replace("nice", "NICE"); 
+0

Мы можем заключить сделку: я удаляю downvote, если вы можете сказать мне, почему «Преобразование объекта Scanner в String» - это не вздор. – Tom

+0

Я даже добавлю надпись, если вы объясните преимущество «begin» и «end»;) –