使用扫描仪查找字母

时间:2015-12-01 23:25:00

标签: java

我在这里尝试做的是让用户输入句子或某种类型的字符串,然后让扫描仪搜索字符串以确定是否存在" 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。

3 个答案:

答案 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并期望对其进行修改。您需要保存函数调用的结果。