替换 Java 中的最后两个字母

Replace last two letters in Java

我正在寻求有关我正在编写的代码的帮助,我希望它能替换最后两个字母。我正在编写一个程序,它将:

  1. 用“FRED”替换四个字母的单词
  2. 将以“ed”结尾的单词的最后两个字母替换为“id”
  3. 最后,将以“di”开头的单词替换为“id”的前两个字母

我对第二条规则有困难,我知道对于第 3 条我可以只使用 replaceFirst() 并使用第一条规则的长度,但我不确定如何具体交换字符串中的最后两个字符。

这是我目前的情况:

package KingFred;

import java.util.Scanner;

public class KingFredofId2 {

public static void main(String args[])
{
    Scanner input = new Scanner(System.in);
    String king = input.nextLine();
    String king22 = new String();
    String king23 = new String();
    if(king.length()==4)
    {
        System.out.println("FRED");
    }
    String myString = king.substring(Math.max(king.length() - 2, 0));
    if (myString.equals("ed")) 
    {
        king22 = king.replace("ed", "id");
        System.out.println(king22);
    }
    if(true)
    {
        king23 = king.replace("di", "id");
        System.out.println(king23);
    }
}

我是 Stack Overflow 的新手,如果这个问题不容易理解,请告诉我如何让我的问题更容易理解。

谢谢。

这是我能想到的解决替换最后两个字符的第二种情况的最简单方法。

import java.util.Scanner;

public class MyClass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter a line or a word: ");
        String s = sc.nextLine();

        //getting the length of entered string
        int length = s.length();
        
        //initializing a new string to hold the last two characters of the entered string
        String extract = "";

        //checking if length of entered string is more than 2
        if (length > 2) {
            //extracting the last two letters
            extract = s.substring(length - 2);
            //updating the original string
            s = s.substring(0, length - 2);
        }


        //checking if the last two characters fulfil the condition for changing them
        if (extract.equalsIgnoreCase("ed")) {
            //if they do, concatenate "id" to the now updated original string
            System.out.println(s + "id");
        } else {
            //or print the originally entered string
            System.out.println(s + extract);
        }
    }
}

我相信评论已经给出了足够的解释,不需要进一步解释。

可能有一种方法可以更优化地组合正则表达式,但这行得通。

  • \b - 单词边界(白色 space、标点等)。
  • \b(?:\w){4}\b - 四字母单词
  • ed\b - 以 ed
  • 结尾的单词
  • \bdi - 以 di
  • 开头的单词
  • replaceAll(regex,b) - 将 regex 匹配的内容替换为字符串 b
String s =
        "Bill charles among hello fool march good deed, dirt, dirty, divine dried freed died";
s = s.replaceAll("\b(?:\w){4}\b", "FRED")
        .replaceAll("ed\b", "id")
        .replaceAll("\bdi", "id");

System.out.println(s);

打印

FRED charles among hello FRED march FRED FRED, FRED, idrty, idvine driid freid F
RED