我在这里尝试做的是让用户输入句子或某种类型的字符串,然后让扫描仪搜索字符串以确定是否存在" 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.我正在寻找一种方法来组合两个替换,然后让它替换和打印如果它找到了e或只是打印"一切都很好!"如果没有" e" s。
答案 0 :(得分:1)
您想要查看Pattern
及其同事Matcher
。这可以准确地给你你想要的东西。
虽然String#replaceAll
为您提供了您想要的内容,但它并不完全是语义上的;你当然可以用" xyz"取代所有的" e"和然后比较它们以查看是否没有变化,但使用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 :(得分:1)
这根本与Scanner
完全没有关系。琐碎的方法:
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");
答案 2 :(得分:-1)
Java字符串是不可变的,因此您无法在replace
上调用userInput
并期望对其进行修改。您需要保存函数调用的结果。