Java 替换所有正则表达式问题

Java replaceall regex issue

我正在尝试为每个辅音添加一个字母,但我遇到的问题是我不知道如何为小写和大写添加不同的字母。

我可以为此使用双正则表达式吗?那样的话,怎么办?

    import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
//      skapar en scanner
        Scanner sc = new Scanner(System.in);
        System.out.print("Skriv en rad text: ");
//      tar användarens input och översätter den till rövarspråket.
        String input = sc.nextLine();   
        System.out.println(input.replaceAll("([bcdfghjklmnpqrstvwxz])", "o"));
    }
}

我认为如果您在正则表达式中使用 OR (|) 应该可以工作

[bcdfghjklmnpqrstvwxz]|[BCDFGHJKLMNPQRSTVWXZ]

您可以使用 | 符号来匹配小写或大写字符。

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class HelloWorld
{
  public static void main(String[] args)
  {
    String text    =
      "John writes about this, and John Doe writes about that," +
      " and John Wayne writes about everything."
      ;

    String patternString1 = "([b-z&&[^eiou]]|[B-Z&&[^EIOU]])";

    Pattern pattern = Pattern.compile(patternString1);
    Matcher matcher = pattern.matcher(text);

    String replaceAll = matcher.replaceAll("");
    System.out.println("replaceAll   = " + replaceAll);
  }
}

输出

replaceAll   = J0Joh0hn0n w0wr0rit0tes0s ab0bout0t t0th0his0s, an0nd0d J0Joh0hn0n D0Doe w0wr0rit0tes0s ab0bout0t t0th0hat0t, an0nd0d J0Joh0hn0n W0Way0yn0ne w0wr0rit0tes0s ab0bout0t ev0ver0ry0yt0th0hin0ng0g.

我认为你的问题是一个更大程序的摘录。

import java.util.Scanner;

public class ScratchJava {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Skriv en rad text: ");
        String input = sc.nextLine();
        String intermediate = input.replaceAll("([bcdfghjklmnpqrstvwxz])", "o");
        System.out.println(intermediate.replaceAll("([BCDFGHJKLMNPQRSTVWXZ])", "X"));
    }
}

您可以分两遍替换小写字母,另一遍替换大写字母。

我在标准库中找不到可以根据匹配条件在同一次传递中替换的方法,尽管对于大输入来说这会快得多。如果遇到性能问题,请考虑自己编写一个。