如何向用户显示更改的字符串

时间:2017-09-25 00:04:15

标签: java

我目前在大学并开始学习java。这是其中的一周,所以我有点落后并坚持我的最后一个问题是希望也许有人可以指出我正确的方向。

import java.util.Scanner;
public class TextMsgExpander {
    public static void main(String[] args) {

       Scanner scnr = new Scanner(System.in);
       String userInput = "";
       String changeAbr = "";


       System.out.println("Enter text: ");
       userInput = scnr.nextLine();
       System.out.println("You entered: " + userInput);

       changeAbr = userInput;

       changeAbr = changeAbr.replace("BFF", "best friend forever");
       changeAbr = changeAbr.replace("IDK", "I don't know");
       changeAbr = changeAbr.replace("JK", "just kidding");
       changeAbr = changeAbr.replace("TTYL", "talk to you later");

       return;

基本上,我还需要弄清楚的是如何print.ln实际改变为用户的内容。 (例如:取代" IDK"用"我不知道"。)我对如何做到这一点完全傻了。到目前为止,我已经尝试了很多不同的方法,但无济于事。从整本书开始,我都没有提出一个单一的答案,我似乎无法弄清楚如何在谷歌上找到类似的东西。

4 个答案:

答案 0 :(得分:1)

如果您希望能够在替换时替换正在替换的内容,最简单的方法是将搜索和替换放入Map

Map<String, String> map = new LinkedHashMap<>();
map.put("BFF", "best friend forever");
// etc.

然后您可以迭代此地图中的条目:

for (Map.Entry<String, String> entry : map.entrySet()) {
  String search = entry.getKey();
  String replacement = entry.getValue();

  // ...
}

在此循环的// ...中:

  • 检查changeAbr是否包含搜索字符串;
  • 如果是,请打印一条消息,然后用替换替换搜索。

我忽略了具体的代码,因为你应该弄清楚如何做到这一点 - 这将是一个很好的学习经历:)

答案 1 :(得分:1)

我希望你不要为此留下长长的答案......哈哈

如果文本已被替换,显然,它存在于字符串中。因此,您可以简单地执行逆过程,如果它存在于字符串中,则替换,并另外警告用户。

不使用正则表达式</3

E.g:

   changeAbr = userInput;
   if (changeAbr.contains("BFF")){
       changeAbr = changeAbr.replace("BFF", "best friend forever");
       System.out.println("Detected the word BFF! (Replaced)");
   }

让我们在这里使用一些功能,所以它不会太长:

 public static String rpl(String txt, String toReplace, String replacement){
        if (txt.contains(toReplace)){
            System.out.println("Detected the word " + toReplace + "! (Replaced)");
            return txt.replace(toReplace, replacement);
        }
     return txt;
 }

然后用它来替换文字警告用户:

    changeAbr = rpl(changeAbr, "BFF", "best friend forever");
    changeAbr = rpl(changeAbr, "IDK", "I don't know");
    changeAbr = rpl(changeAbr, "JK", "just kidding");
    changeAbr = rpl(changeAbr, "TTYL", "talk to you later");
    System.out.println(changeAbr);

完整代码

public static String rpl(String txt, String toReplace, String replacement){
        if (txt.contains(toReplace)){
            System.out.println("Detected the word " + toReplace + "! (Replaced)");
            return txt.replace(toReplace, replacement);
        }
     return txt;
 }

public static void main(String[] args) {

   Scanner scnr = new Scanner(System.in);
   String userInput = "";
   String changeAbr = "";


   System.out.println("Enter text: ");
   userInput = scnr.nextLine();
   System.out.println("You entered: " + userInput);

   changeAbr = userInput;

   changeAbr = rpl(changeAbr, "BFF", "best friend forever");
   changeAbr = rpl(changeAbr, "IDK", "I don't know");
   changeAbr = rpl(changeAbr, "JK", "just kidding");
   changeAbr = rpl(changeAbr, "TTYL", "talk to you later");
}

使用正则表达式! <3

另外,如果你想向用户显示它被替换的次数,你可以使用正则表达式(这里不会没用,因为我们也可以使用边界\b,以防用户键入包含缩写的单词,我们还可以显示文本位置,如果需要,甚至可以忽略带Pattern.CASE_INSENSITIVE的大写字母。以下是此功能:

public static String rpl(String txt, String toReplace, String replacement) {
    Pattern a = Pattern.compile("\\b"+toReplace+"\\b");
    Matcher matcher = a.matcher(txt);
    while (matcher.find()) {
        System.out.println(
                "Detected the word " + toReplace + " at position " + matcher.start() + " to " + matcher.end() + " (Replaced)");
        txt = matcher.replaceFirst(replacement);
        matcher = a.matcher(txt);
    }
    return txt;
}

完整代码

public static String rpl(String txt, String toReplace, String replacement) {
    Pattern a = Pattern.compile("\\b"+toReplace+"\\b");
    Matcher matcher = a.matcher(txt);
    while (matcher.find()) {
        System.out.println(
                "Detected the word " + toReplace + " at position " + matcher.start() + " to " + matcher.end() + " (Replaced)");
        txt = matcher.replaceFirst(replacement);
        matcher = a.matcher(txt);
    }
    return txt;
}

public static void main(String[] args) {

   Scanner scnr = new Scanner(System.in);
   String userInput = "";
   String changeAbr = "";


   System.out.println("Enter text: ");
   userInput = scnr.nextLine();
   System.out.println("You entered: " + userInput);

   changeAbr = userInput;

   changeAbr = rpl(changeAbr, "BFF", "best friend forever");
   changeAbr = rpl(changeAbr, "IDK", "I don't know");
   changeAbr = rpl(changeAbr, "JK", "just kidding");
   changeAbr = rpl(changeAbr, "TTYL", "talk to you later");
   System.out.println(changeAbr);
}

输出:

  

输入文字:
  的&GT;嘿BFF! IDK输入什么,但你是我的BFF:D(来自JKing)
  你进入了:嘿BFF! IDK要输入什么,但你是我的BFF:D(来自JKing)
  检测到 4 位置 BFF 7 (已替换)
  检测到 56 位置 BFF 59 (已替换)
  检测到 25 位置 IDK 28 (已替换)

     永远是最好的朋友!我不知道该打字什么,但你永远是我最好的朋友:D(来自JKing)

注意:

  • JKing未被just kiddinging替换,因为字边界。
  • 文字位置(粗体数字)是相对的。他们总是会显示上一次替换文字 AFTER 的位置。

答案 2 :(得分:-1)

使用

System.out.println(changeAbr);

这将打印出changeAbr变量的值。

如果您需要打印每个更改,则需要使用另一个扫描程序 扫描输入行中的每个单词,如下所示:

Scanner line = new Scanner(userInput);
String outLine = "";
while (line.hasNext()) {
    String word = line.next();
    switch (word) {
        case "BFF":
            System.out.println("Replaced BFF with 'Best Friend Forever'");
            outLine += "best friend forever";
            break;
        ...
        default:
            outLine += word;
            break;
     }
     outLine += " ";
}

此代码存在的一个问题是它无法识别紧跟在其后面的带标点符号的字词(例如JK!),但这可以很容易地修复。

答案 3 :(得分:-1)

使用多个if块

 If(string.contains(text)){
     System.out.println(abv + " changed 
     to " + convertedAbv);
 } if(second condition) etc...