Java заменяет все регулярные выражения - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь добавить букву к каждому согласному, у меня проблема в том, что я не могу понять, как мне добавлять разные для строчных и прописных букв.

Могу ли я использовать двойное регулярное выражение для этого? в таком случае как?

    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 голосов
/ 06 сентября 2018

Вы можете использовать символ | для соответствия символам в нижнем и верхнем регистре.

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.
0 голосов
/ 06 сентября 2018

Я думаю, что ваш вопрос - выдержка из более крупной программы.

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"));
    }
}

Вы можете заменить в два прохода один для нижнего регистра другого для верхнего регистра.

Я не смог найти метод в стандартной библиотеке, который заменил бы за один проход в зависимости от условия совпадения, хотя это было бы намного быстрее для большого ввода. Если вы столкнулись с проблемами с производительностью, подумайте над тем, чтобы написать один.

0 голосов
/ 06 сентября 2018

Я думаю, что это должно работать, если вы используете OR (|) в своем регулярном выражении

[bcdfghjklmnpqrstvwxz]|[BCDFGHJKLMNPQRSTVWXZ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...