java - 使用字符串数组时如何编写 lambda 表达式?

标签 java arrays regex lambda java-8

我想使用 lambda 表达式而不是经典的 for。

 String str = "Hello, Maria has 30 USD.";
 String[] FORMAT = {"USD", "CAD"};
 final String simbol = "$";

 //  This was the initial implementation. 
 //  for (String s: FORMAT) {
 //      str = str.replaceAll(s + "\\s",  "\\" + FORMAT);
 //  } 

 Arrays.stream(FORMAT).forEach(country -> {
      str = str.replaceAll(country + "\\s",  "\\" + simbol);
 });  

 // and I tried to do like that, but I receiced an error 
 // "Variable used in lambda expression should be final or effectively final"
 // but I don't want the str String to be final

对于任何字符串,我想更改 $ simbol 中的美元或加元。
我怎样才能改变这个代码工作?提前致谢!

最佳答案

我认为为此使用循环没有问题。这就是我可能会做的。

您可以使用 reduce 对流进行此操作:

str = Arrays.stream(FORMAT)
    .reduce(
        str,
        (s, country) -> s.replaceAll(country + "\\s", Matcher.quoteReplacement(simbol)));

或者,更简单:

str = str.replaceAll(
    Arrays.stream(FORMAT).collect(joining("|", "(", ")")) + "\\s",
    Matcher.quoteReplacement(simbol));

关于java - 使用字符串数组时如何编写 lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60947765/

相关文章:

javascript - 替换选择字段中的选项(不添加)

javascript - 正则表达式无法测试手机号码

java - 无法到达的声明

php - 在 PHP 中应该使用数组还是类来保存多个变量?

arrays - 如何根据关联数组的键创建数组?

ios - NSArray转Swift Array后Array为空

java - 有没有办法在 JLabel 上设置 anchor ?

java - 尝试执行 mvn clean install -DskipTests=true 时出现错误

java - 使用 Webdriver 和 Java 运行自动化脚本时出现意外的数字输出

javascript - jQuery正则表达式删除不符合要求的数字