Java Replaceall正则表达式问题

时间:2018-09-06 19:52:23

标签: java replaceall

我正在尝试给每个辅音添加一个字母,但我确实遇到的问题是我无法弄清楚应该为小写字母和大写字母添加不同的字母。

我可以为此使用双正则表达式吗?在这种情况下,如何?

    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])", "$1o$1"));
    }
}

3 个答案:

答案 0 :(得分:0)

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

[bcdfghjklmnpqrstvwxz]|[BCDFGHJKLMNPQRSTVWXZ]

答案 1 :(得分:0)

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

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("$10$1");
    System.out.println("replaceAll   = " + replaceAll);
  }
}

输出

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

答案 2 :(得分:0)

我认为您的问题是较大程序的摘录。

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])", "$1o$1");
        System.out.println(intermediate.replaceAll("([BCDFGHJKLMNPQRSTVWXZ])", "$1X$1"));
    }
}

您可以分两次替换一次,一次替换为小写,另一次替换为大写。

我在标准库中找不到一种方法,该方法可以根据匹配条件在同一遍中进行替换,尽管对于大输入而言,该方法要快得多。如果遇到性能问题,请考虑自己写一个。