2015-12-01 5 views
0

Что я пытаюсь сделать здесь, так это указать пользователю предложение или строку какого-либо типа, а затем выполнить поиск в строке по строке, чтобы определить, есть ли «e» или «E», там. Если сканер найдет один из них, он заменит их «xyz». Если их нет, тогда он должен вернуться «Все хорошо!» Код у меня до сих пор является:Использование сканера для поиска буквы

public class Example { 
    String userInput; 

    Scanner in = new Scanner(System.in); 
    System.out.println("Please write a sentence."); 
    userInput = in.nextLine(); 

    System.out.println(userInput.replace("e","xyz")); 
    System.out.println(userInput.replace("E","xyz")); 

    in.close(); 
} 

Как я думаю, что вы можете сказать, что это на самом деле просто печатает ту же линию дважды, один раз удаления строчных е и другое удаление капитала E. Я искал способ объединить две замены, а затем заменить и распечатать, если он найдет e или просто напечатал «Все хорошо!» если нет «е».

+1

[Java = JavaScript!] (Http://stackoverflow.com/a/245069/1393766) – Pshemo

+1

смотреть на это сообщение HTTP: //jelaniharris.com/2009/case-insensitive-replaceall-in-java/ –

ответ

1

Это совсем не связано с Scanner. Trivial подход:

String replaced = userInput.replace("e","xyz").replace("E","xyz"); 
String out = replaced.equals(userInput) ? "All is good!" : replaced; 
System.out.println(out); 

Или используйте replaceAll:

Pattern eE = Pattern.compile("[eE]"); 
String replaced = eE.matcher(userInput).replaceAll("xyz"); 
+0

Ой! Извините, слишком привык к Scala, где это работает так, как ожидалось. –

+0

Можете ли вы объяснить, что? делает в Java? Можете ли вы поместить вторую строку в слова? «Создал новую строку ... и т. Д.». –

+1

@ EricW http://stackoverflow.com/q/17470595/1393766 – Pshemo

1

Вы хотите посмотреть на Pattern и его ассоциированный Matcher. Это может дать вам именно то, что вы хотите.

Пока String#replaceAll дает вам то, что вы хотите, это не совсем семантический; вы можете, конечно, заменить все «е» на «xyz» и , затем сравнить их, чтобы увидеть, не было никаких изменений, но с использованием Matcher дает вам немного более очевидный контроль над логикой.

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

String userInput; 

Scanner in = new Scanner(System.in); 
System.out.println("Please write a sentence."); 
userInput = in.nextLine(); 
Pattern pattern = Pattern.compile("[eE]"); 
Matcher matcher = pattern.matcher(userInput); 
if(matcher.find()) { 
    System.out.println(matcher.replaceAll("xyz")); 
} else { 
    System.out.println("All is good!"); 
} 
System.out.println(userInput.replaceAll("[eE]","xyz")); 

Кроме того, не закрывайте поток System.in. Нежелательно закрывать это, если какая-то другая часть вашего приложения хочет использовать его, или если вы хотите использовать его позже.

-1

Строки Java неизменяемы, поэтому вы не можете просто позвонить replace по телефону userInput и ожидать, что он будет изменен на месте. Вам нужно сохранить результат вызова функции.

+0

Ваши советы звучат, но в этом случае они только распечатывают замену. Сохранить строку некуда. – Makoto

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