Java8 показывает, как заменить определенный список символов другим списком символов - PullRequest
2 голосов
/ 13 октября 2019

У меня есть список символов Unicode, которые должны быть заменены некоторыми другими символами, у меня это работает. Но я должен повторить это дважды, чтобы получить результат. Можно ли зациклить только один раз и получить результат?

Например, я хочу заменить это "\ u201C", "\ u201D" на "\" "(умная двойная кавычка со стандартной двойной кавычкой) изаменить "\ u2018", "\ u2019" на "'" (умная одинарная кавычка со стандартной одинарной кавычкой)

public class HelloWorld{

     public static void main(String []args){
        List<String> toRemove = Arrays.asList("\u201C","\u201D");
        List<String> toRemove1 = Arrays.asList("\u2018","\u2019");
        String text = "KURT’X45T”YUZXC";
        text=toRemove.stream()
                .map(toRem -> (Function<String,String>) s ->  s.replaceAll(toRem, "\""))
                .reduce(Function.identity(), Function::andThen)
                .apply(text);

        System.out.println("---text--- "+ text);

        text=toRemove1.stream()
            .map(toRem -> (Function<String,String>) s ->  s.replaceAll(toRem, "'"))
            .reduce(Function.identity(), Function::andThen)
            .apply(text);

        System.out.println("---text-1-- "+ text);
     }
}

1 Ответ

2 голосов
/ 13 октября 2019
  • Это можно решить с помощью карты, а затем с помощью entrySet, как показано ниже
public class HelloWorld{

     public static void main(String []args){
        Map<String,String> map = new HashMap<String,String>();
        map.put("\u2018","'");
        map.put("\u2019","'");
        map.put("\u201C","\"");
        map.put("\u201D","\"");



        List<String> toRemove = Arrays.asList("\u2018","\u2019","\u201C","\u201D");

        String text = "KURT’X45T”YUZXC";


        text=map.entrySet().stream()
                .map(e -> (Function<String,String>) s ->  s.replaceAll(e.getKey(), e.getValue()))
                .reduce(Function.identity(), Function::andThen)
                .apply(text);
        System.out.println(text);

       // or you can even do like this

        text=map.entrySet().stream()
                .map(e -> (Function<String,String>) s ->  s.replaceAll(e.getKey(), e.getValue()))
                .reduce(Function.identity(),(a, b) -> a.andThen(b))
                .apply(text);
        System.out.println(text);


     }
}
...